Mi sono interessato di recente alla programmazione in C++, perché voglio approfondire la comprensione del modo in cui i computer funzionano e gestiscono le istruzioni. Ho pensato di provare i tipi di dati, ma io in realtà non capire cosa sta succedendo con la mia uscita ...C'è qualcosa di sbagliato nel modo in cui sto usando un lungo doppio?
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float fValue = 123.456789;
cout << setprecision(20) << fixed << fValue << endl;
cout << "Size of float: " << sizeof(float) << endl;
double dValue = 123.456789;
cout << setprecision(20) << fixed << dValue << endl;
cout << "Size of double: " << sizeof(double) << endl;
long double lValue = 123.456789;
cout << setprecision(20) << fixed << lValue << endl;
cout << "Size of long double: " << sizeof(long double) << endl;
return 0;
}
L'uscita mi aspettavo sarebbe qualcosa di simile:
123.45678710937500000000
Size of float: 4
123.45678900000000000000
Size of double: 8
123.45678900000000000000
Size of long double: 16
Questo è la mia produzione attuale:
123.45678710937500000000
Size of float: 4
123.45678900000000000000
Size of double: 8
-6518427077408613100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00000000000000000000
Size of long double: 12
Qualsiasi idea su quello che è successo sarebbe molto apprezzata, grazie!
Edit:
System:
Windows 10 Pro Technical Preview
64-bit Operating System, x64-based processor
Eclipse CDT 8.5
Impossibile riprodurre. Che compilatore stai usando? –
La dimensione di 'long double' varia a seconda del compilatore e dell'hardware. Le taglie 8, 12 e 16 sono note. Quello che vedi come una misura è perfettamente ragionevole, anche se non era quello che ti aspettavi. L'output formattato non è così ragionevole, però. –
FWIW (che è di circa niente), esegue il codice su Mac OS X 10.10.2 con GCC 4.9.1 rendimenti: '123,45678710937500000000 Superficie float: 4 123,45678900000000055570 Dimensioni di doppia: 8 123,45678900000000055570 Superficie long double: 16'. Aggiungendo il suffisso 'F' al valore' float' e il suffisso 'L' al valore' long double' non fa alcuna differenza per l'output 'float' o' double', ma cambia l'output 'long double' a:' 123.45678900000000000059 Dimensioni del doppio lungo: 16', che mostra una precisione migliore. –