2016-06-26 11 views
0

Warum die Anzahl der Stellen von beiden schweben sowie Doppel variable gleiche gespeichert ist, doppelt so hoch ist eigentlich nicht mehr Ziffern zu speichern, als floatDigits in float und double Variable

#include <iostream> 
using namespace std; 
int main(){ 
double a = 3.141528579238; 
float b = 3.141528579238; 
cout << a << " " << b; 
return 0; 
} 

Ich erhalte diese als mein Ausgang

3.14153 3.14153 
+1

Die Anzahl der gespeicherten Ziffern entspricht nicht der Anzahl der angezeigten Ziffern. – aschepler

+1

http://stackoverflow.com/questions/588004/is-floating-point-math-broken –

+0

@OP: Damit Sie irgendwelche Beobachtungen über was gespeichert wird, müssen Sie die Zahlen im Debugger/Speicher nicht überprüfen Verwenden Sie Ausgabeanweisungen, um die Nummer anzuzeigen. – PaulMcKenzie

Antwort

1

Das Problem, dass Sie konfrontiert sind, weil zuerst sollten Sie, dass float 4 Bytes kennen und Doppel hat 8 Bytes und 3,141528579238 vielleicht in beide gespeichert werden können, und wenn Sie möchten mehr Stellen zeigen, i mit einer ersten empfehlen: #include <iomanip> dann Mit dem folgenden Befehl können Sie beliebig viele Ziffern nach dem "." : cout << std::setprecision(7) << myFloat; Dies wird 3.1415285 angezeigt.

0

Es geht nicht um Ziffern es geht um Bits!

float s sind 32bit und double s sind 64bit. Eine Gleitkommazahl kann wie folgt ausgedrückt werden: a*2^x wobei a < 1 und a => 0. a und x werden entweder in 32- or 64-bit Speicher gespeichert.

Der Grund, warum Ihr Programm das gleiche Ding druckt, ist, weil es gerade Ihre ganze Zahl nicht druckt.