größe einer float variablen
-
hallo,
warum kommt wenn ich bei folgendem prorgamm:int main() { float x; scanf("%f",&x); printf("%f\n",x); }
Die Zahl 123456789 eingebe als Ergebniss: 123456792.000 heraus?
passiert auch bei double....
Der platz müßte doch dicke ausreichen,oder nicht?
-
Lass dir mal FLT_DIG aus float.h ausgeben. Das gibt dir an, wie viele Stellen du in ein float packen kannst die dann unverändert bleiben. Bei IEEE754 dürften das 6 sein.
#include <stdio.h> #include <float.h> int main() { printf("%d %d %d\n", FLT_DIG, DBL_DIG, LDBL_DIG); }
-
edit: rüdigers Antwort ist besser.
-
bei float reicht die genauigkeit nicht aus. bei double müsste das eigtl. hinhauen.
-
stimmt, sind 6 ...
aber jetzt mal ne ganz doofe frage eines Anfängers....
wie bekomme ich es denn hin mit größeren Zahlen zu rechnen?
kann mein Taschenrechner aus dem Windowszubehör ja schließlich auch, oder?oh gott, dass is bestimmt ein saudoofer vergleich,oder?
-
#include<stdio.h> int main() { double x = 123456789.0; printf("%f\n", x); return 0; }
Geht ohne Probleme bei mir.
-
so funktioniert es bai mir auch, aber nicht, wenn ich die Zahl über scanf einlese ....
liegt es vielleicht an scanf?
-
Bei double musst du mit "%lf" einlesen, "%f" ist nur für float (bei printf ist es egal).
-
float erlaubt natürlich auch größere Zahlen, mittels Exponenten (bei IEEE754 maximal 37 iirc). Dann kann man aber natürlich immer noch nur 6 Stellen angeben. Also zB 123.0e34f. Mit double und long double geht noch mehr. (btw. ich würde im Normalfall immer double und nicht float nehmen, wegen der höheren Präzision)
Wenn du aber wirklich große Zahlen und hohe Präzision haben willst, dann musst du Bignums implementieren/benutzen. zB http://gmplib.org/ bzw. http://www.mpfr.org/
-
Danke!
Die tipps waren super.
funktioniert jetzt wie ich es brauche und mit dem Rest, den ich noch nicht verstanden habe...(@rüdiger: das sind mal echt ne Menge gute infos) werd ich jetzt mal Anfangen mich zu beschäftigen.Danke an alle!!!