Hallo Zusammen,
eine kleine Frage, laut meinem C Buch ist float:
1
DatentypBitMin.Max.
2
float32ca.3.4E-38ca.3.4E38
3
double64ca.1.7E-308ca.1.7E308
4
longdouble80ca.1.2E-4932ca.1.2E4932
eine 3.4E-38 ???
Ich hab gelesen, 6 bis 8 Stellen hinter dem Komma,
aber wieviel vor dem Komma möglich?
Möchte gerne mit Zahlen rechnen mit max. ~150.000 vor dem
Komma und ~3-4 Stellen nach dem Komma haben.
Geht das mit einem float?
Danke
Klaus
Klaus schrieb:> eine 3.4E-38 ???
3,4 mal 10 hoch -38
> Ich hab gelesen, 6 bis 8 Stellen hinter dem Komma,> aber wieviel vor dem Komma möglich?
Eine. Float ist eine Flieskommazahl, sprich
10 = 1.0E1
2450 = 2.450E3
...
>Möchte gerne mit Zahlen rechnen mit max. ~150.000 vor dem>Komma und ~3-4 Stellen nach dem Komma haben.
Ich gehe mal davon aus, das du mit 150'000 (hundertfünfzigtausend) die
Zahl und nicht die Anzahl der Kommastellen meinst:
Wenn du jetzt noch vier Kommastellen hast, dann ist das eine Zahl der
Form:
150'000,000'0
Ohne Kommas ist das eine Zahl von 1,5Giga.
Warum nimmst du nicht einfach ein 32bit-Wert (uint32_t oder int32_t).
Somit hast du einen Zahlenraum von 0..4,3E+9 bzw. -2,2E+9..+2,2E+9.
Das kannst du doch als Zehntausendstel auffassen. Ich nenne das
Pseudofloat.
Du arbeitest also immer mit Zehntausendensteln und tust bei der Anzeige
einfach das Komma geeignet dazwischen schieben.
Bei dir würde das von 0..430'000, bzw. von -220'000,0000 bis
+220'000,0000 reichen.
Floh schrieb:> Eine Float ist eine Flieskommazahl, sprich...
...in der richtigenbinären Fließkommadarstellung ist die führende
Zahl immer eine implizite (binäre) 1. Danach kommen nur noch
Nachkommastellen... ;-)
Mehr dazu in http://de.wikipedia.org/wiki/Gleitkommazahl unter
Normalisierung.
In eine Fliesskommazahl kann z.B. 123456.0 abgebildet werden, oder auch
0.123456, denn das sind jeweils 6 signifikante Stellen. Aber das
funktioniert nicht: 123456.123456, denn das wären 12 signifikante
Stellen.
Auch so was simples geht nicht: 10000.000001
Hier wird die Nachkomma-Eins irgendwie im "Rauschen" untergehen... :-/
Matthias Lipinsky schrieb:> Das kannst du doch als Zehntausendstel auffassen. Ich nenne das> Pseudofloat.
Nein, das ist dann eben genau kein Float mehr sondern _Fix_komma.
Nachvollziehbar, was du mit Pseudofloat meinst, aber der Begriff greift
voll daneben, da Float ja genau ausdrückt, dass das Komma fliesst
und eben nicht Fix ist.
Hallo vielen Dank für Feedback,
Also wenn ich das jetzt richtig verstanden habe:
Also 32 Bit Integer +-2,2Mrd. = 10 Stellen ings. (+- 2200.000.000)
Wenn ich mir das Komma merke (4 Stellen), ok, dann passt es. Prima.
Wieso hat dann eine 32bit Floatzahl (123456.0) nur 6 signifikate
Stellen insg.?
hmmm...
Vg
Klaus
Eine 32-Bit-FP-Zahl nach IEEE 754 besteht aus 23 bit Mantisse 1 bit
Vorzeichen und 8 bit Exponenent.
Das ergibt eine Auflösung von lg(2^23)=6,92 Stellen. Die siebte Stelle
ist also mit einer leichten Ungenauigkeit behaftet.
Der (dezimale) Exponent kann lg(2^2^8)=77,06 Werte annehmen, davon ist
die Hälfte positiv, die andere Hälfte negativ. Daraus ergibt sich ein
Wertebereich von etwa 10^-38 bis 10^+38.
Entsprechendes gilt für 64-FP-Zahlen (52 bit Mantisse, 1 bit Vorzeichen
und 11 bit Exponent.
http://de.wikipedia.org/wiki/IEEE_754