Während des Studiums der C-essentials aus Online-Video, teilte der Autor den Code unten, um den Unterschied zwischen Float, Doppel-und Long-Double zu finden. Ich lief dieses Programm in Eclispse läuft in 64-Bit-Windows 10 Laptop.Formatbezeichner% Lf für lange Doppel in C funktioniert nicht wie erwartet
#include <stdio.h>
#include <stdlib.h>
int main(void) {
puts("Floating point type usage in C:");
// Floating point types
float floatNumber;
double doubleNumber;
long double longDoubleNumber;
// Size of floating point types
//lu - Stands for "unsigned decimal integer" and "long"
printf("Storage size for unsigned float : %lu bytes \n", sizeof(float));
printf("Storage size for double : %lu bytes \n", sizeof(double));
printf("Storage size for long double : %lu bytes \n", sizeof(long double));
floatNumber = 2.0/3.0;
doubleNumber = 2.0/3.0;
longDoubleNumber = 2.0/3.0;
puts("\nCompare precision at 4 decimal points:");
printf("floatNumber = %1.4f\n", floatNumber);
printf("doubleNumber = %1.4lf\n", doubleNumber);
printf("longDoubleNumber = %1.4Lf\n", longDoubleNumber);
puts("\nCompare precision at 10 decimal points:");
printf("floatNumber = %1.10f\n", floatNumber);
printf("doubleNumber = %1.10lf\n", doubleNumber);
printf("longDoubleNumber = %1.10Lf\n", longDoubleNumber);
puts("\nCompare precision at 30 decimal points:");
printf("floatNumber = %1.30f\n", floatNumber);
printf("doubleNumber = %1.30lf\n", doubleNumber);
printf("longDoubleNumber = %1.30g\n", longDoubleNumber);
return 0;
}
Irgendwie bekomme ich nicht die erwartete Ausgabe. Ich habe die Ausgabe hinzugefügt, die ich in meiner Eclispse-Konsole erhalten hatte. Könnte mir jemand helfen, was falsch
Floating point type usage in C:
Storage size for unsigned float : 4 bytes
Storage size for double : 8 bytes
Storage size for long double : 16 bytes
Compare precision at 4 decimal points:
floatNumber = 0.6667
doubleNumber = 0.6667
longDoubleNumber = 0.0000 //Expected value = 0.6667
Compare precision at 10 decimal points:
floatNumber = 0.6666666865
doubleNumber = 0.6666666667
longDoubleNumber = 0.0000000000 //Expected value = 0.6666666667
Compare precision at 30 decimal points:
floatNumber = 0.666666686534881590000000000000
doubleNumber = 0.666666666666666630000000000000
longDoubleNumber = 3.1728895775924853e-317 //This is not the expected value
ging, um herauszufinden,
Welche Compiler und Laufzeit/libc verwenden Sie? –
Probieren Sie 'longDoubleNumber = (long double) 2.0/3.0;' – sjsam
@sjsam aus, das Fehlen eines Cast im ursprünglichen Code könnte absichtlich sein. Jedenfalls erklärt es die vorgestellte Ausgabe nicht. –