www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Foat - Wieviel Stellen vor dem Komma sind möglich?


Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

eine kleine Frage, laut meinem C Buch ist float:
Datentyp        Bit    Min.          Max.
float           32 ca.  3.4E-38 ca.    3.4E38
double          64 ca.  1.7E-308 ca.  1.7E308
long double     80 ca. 1.2E-4932 ca. 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups, natürlich float im titel... :)

Autor: Lasse S. (cowz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es kommt auf die Anzahl der verwertbaren Ziffern an, nicht auf die 
Position des Kommas.


1,0001 = 10001E-4 (huch, plötzlich ist das Komma weg ;) )

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Floh schrieb:
> Eine Float ist eine Flieskommazahl, sprich...
...in der richtigen binä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... :-/

Autor: P. M. (o-o)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ P. M. (o-o)

Du hast ja Recht. Deshalb hab ich ja geschrieben:
ich  nenne  das Pseudofloat

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Lipinsky schrieb:
> Das kannst du doch als Zehntausendstel auffassen. Ich nenne das
> Pseudofloat.

ich nenne das fixkomma scnr

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.