Feststellen der Anzahl von nachkommastellen einer float
-
Geht das? (Vorzugsweise mit irgendwas vorgefertigtem, wenns sein muss auch anders... Mein Gedankengang wäre: float in eine neue float kopieren, in ein integer umwandeln und mit dem alten float vergleichen. Wenn gleich, Stellen=0, sonst int löschen, altes float mit 10 multiplizieren, neu, umwandeln vergleichen...)
-
Hi!
Guck dir mal Streams an, da wandelst du die Zahl in einen String und ermittelst dann die Nachkommastellen:
http://www.c-plusplus.net/forum/viewtopic.php?t=39488&highlight=zahl+stringCode-Hacker
-
Es ist ganz einfach nicht möglich.
http://www.physics.ohio-state.edu/~dws/grouplinks/floating_point_math.pdf
-
Hi!
In einem Test hat es funktioniert. Muss ich jetzt davon ausgehen das es nicht immer funktioniert, sprich undefiniert ist ob es klappt oder nicht?
@Ringding:
Kannst du einen Teil daraus zitieren? Würde mir ungerne den gesamten Text durchlesen.Code-Hacker
-
Verstehe ich das richtig, das man die Nachkommastellen nicht ermitteln kann?
-
ness schrieb:
Verstehe ich das richtig, das man die Nachkommastellen nicht ermitteln kann?
natürlich kann man.
hier ist wieder sowas, wo der mathematiker beweist, daß man es nicht unendlich genau machen kann und der informatiker es einfach macht.
-
Also so wie code-hacker vorgeschlagen hat...
-
Ja, wird das einfachste sein. Kannst natürlich auch ne Schleife machen in der du hochzählst und dann die Zahl mal 10 nimmst und die Vorkommastellen abschneidest (ceil) solange bis die Zahl 0 wird.
#include <cmath> unsigned test(double foo) { unsigned n = 0; while((foo = std::floor(foo)) != 0.) { ++n; foo *= 10; } return n; }
Ist noch früh am Morgen, kann also sein, dass die Sache nen Haken hat (da ungetestet)
.
EDIT 1-4: Viele Tippfehler und einer im Code
-
Gleich eine Frage: WAS IST DER UNTERSCHIED ZWISCHEN DOUBLE UND FLOAT?
-
double ist genauer, da es eine höhere Mantissenlänge hat, verbraucht aber auch mehr Speicher. Man muss halt je nach Situation entscheiden welches man nimmt.
-
ness schrieb:
Also so wie code-hacker vorgeschlagen hat...
jo.
und das mit dem multiplizieren geht nicht ohne weiteres, weil man 0.2 binär nicht glatt darstellen kann, und das kann man multiplizieren, solange man will, es wird nie ne glatte float werden, solange noch nachkommastellen da sind.
aber nachher hat man 2.0000000000000 oder 1.9999999999999 raus und darf dann nachdenken, ob man damit 2 meinen sollte.
-
Args, der befürchtete Haken...