mikrocontroller.net

Forum: PC-Programmierung Gleitkommazahl, Festkommazahl


Autor: Tym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ist mir die deutsche Sprache zu schwer oder verstehe ich es nicht?!
Kann mit jemand sagen:
1. Was ist Gleitkommazahl?
2. Was ist Festkommazahl?

Vielen Dank
Tym

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gleitkommazahl = die Position des Kommas (also der Exponent) ist 
variabel und wird mit abgespeichert.
Festkommazahl = Exponent ist fest, also nur per Vereinbarung zwischen 
den verschiedenen Codeteilen, die auf die Daten zugreifen, definiert.

Autor: Tym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist es nicht in beiden Fällen der Datentyp float?

irgendwie kann ich mir nichts darunter vorstellen :-(

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tym wrote:
> ist es nicht in beiden Fällen der Datentyp float?

Nein. float ist Fliesskomma

>
> irgendwie kann ich mir nichts darunter vorstellen :-(

Stell dir vor du musst eine kaufmännische Anwendung machen.
Also alles in Euro. Du hättest aber gerne 2 Nachkommastellen,
willst aber (aus diversen Gründen) keine float verwenden (was
eine gute Entscheidung ist).
Wie kannst du das realisieren? Na. zb indem du mit dir selbst
vereinbarst, dass deine Basiseinheit nicht Euro ist, sondern
Cent. Du speicherst also alles in Cent (d.h. als Euro mit 2
Nachkommastellen). Ein Zahlenwert von 100 heist also 1.00 Euro

hier hast du ein fixes Komma. Das Komma ist immer nach der 2. Stelle
angesiedelt.

Als Datentyp kannst du daher einen int oder einen long nehmen
und bei Ein / Ausgabe berücksichtigen, dass du extern nicht
in Cent sondern in Euro arbeitest, d.h. das du ein fixes Komma
an Position 2 hast.

Autor: Tym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
macht es denn so viel unterschied zwischen integer und float (außer dass 
float 32bit und integer 16bit lang sind)?

@Karl heinz Buchegger
dein Beispiel ist super schön und sehr verständlich, Danke.

hast Du auch ein Beispiel für eine Gleitkommazahl oder ist es in dem 
Fall wirklich der Datentyp float?

und eine doofe Frage:
ist Fliesskomma = Gleitkomma? Macht es ein Unterschied ob das Komma 
"fliesst" oder "gleitet"?

Autor: Sym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fließkommazahlen können ebenso wie Festkommzahlen je nach Typ 
unterschiedliche Bit-breite haben. Float hat 32 Bit, double 64 bit. Die 
Breite von Int ist platformabhängig.

Ja es bestehen viele Unterschiede, vor allem bedingt durch eine variable 
Genauigkeit.

uC haben meist keine FPU, sodass man sich mit Festkommazahlen behelfen 
muss.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tym wrote:
> macht es denn so viel unterschied zwischen integer und float (außer dass
> float 32bit und integer 16bit lang sind)?

Auf einem µC ohne FPU ist integer Rechnerei meist um ein
schönes Stück schneller als Gleitkommarechnerei

> hast Du auch ein Beispiel für eine Gleitkommazahl oder ist es in dem
> Fall wirklich der Datentyp float?

float und double sind Gleitkomma.
Das ist per Design so.

> und eine doofe Frage:
> ist Fliesskomma = Gleitkomma?

ja
Gemeint ist immer: Die Position des Kommas ist in der Zahl selbst
gespeichert und wird bei Berechnungen entsprechend berücksichtigt,
bzw. angepasst. Daher muss das Komma entsprechend 'gleiten'
können.
Ist ein bischen wie beim Bruchrechnen. Auch dort können 2
Brüche nur dann addiert werden, wenn sie vorher auf den gleichen
gemeinsamen Nenner gebracht wurden. Völlig analog, muß bei
einer Gleitkomma-Addition das Komma der einen Zahl an dieselbe
Position wie bei der anderen Zahl 'gleiten' bevor die Addition
gemacht werden kann.
Bei Festkomma kann man sich das sparen, da per Definition das
Komma immer an derselben Stelle ist.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> macht es denn so viel unterschied zwischen integer und float (außer dass
> float 32bit und integer 16bit lang sind)?

Es gibt auch Gleitkomma-Typen mit 16 Bit und Integer-Typen mit 32 Bits.

> hast Du auch ein Beispiel für eine Gleitkommazahl oder ist es in dem
> Fall wirklich der Datentyp float?

Es ist auch die Art, wie Wissenschaftler häufig ihre Zahlen angeben, da 
deren Wertebereich so groß sind, wie z.B. h = 6,63 mal 10 hoch -34. Das 
ist eine Mantisse/Wert-Angabe, wie sie auch bei der 
Gleitkomma-Darstellung im Rechner verwendet wird. Man kann damit den 
Wertebereich einer Variablen stark vergrößern.

> ist Fliesskomma = Gleitkomma? Macht es ein Unterschied ob das Komma
> "fliesst" oder "gleitet"?

Nein. Ersteres ist nur eine falsche Übersetzung aus dem Englischen 
(fließen = to flow statt gleiten/treiben = to float).

Autor: Tym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm.. ich habe es nicht verstanden :-$

bei Festkommazahlen ist es eindeutig, das Komma bleit immer "fest" an 
der gleichen Stelle.

100,52 € -> 10052 €-Cent

weil das gielt, kann ich als Datentyp Integer nehmen und später bei der 
Anzeige/Ausgabe die Zahl mit Komma darstellen (ohne irgendwelche 
Bedenken).


Jetzt könnte ich irgendetwas messen und mein Ergebnis ist jedesmal 
anderer Wert

3,2345
234,12
3445,1

dann ist doch klar, dass ich als Datentyp Float nehme oder müsste ich 
mir jetzt etwa gedanken machen, ob es eine Gleit- oder Fließkommazahl 
ist
=> aber was macht es aus, ob es Gleit- oder Fließkommazahl ist?!

mache ich mir das Leben schwer und wandle die Zahlen um in:
3,2345 -> 32345 mal 10 hoch -4
234,12 -> 23412 mal 10 hoch -2
3445,1 -> 34451 mal 10 hoch -1

und ich wüsste jetzt immer noch nicht was Gleit- und Fließkommazahl 
sind, was sie von einander unterscheidet :-$

Sorry, ich bin nicht stur oder gedankenlos aber ich sehe keine logik 
dahinter..

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> bei Festkommazahlen ist es eindeutig, das Komma bleit immer "fest" an
> der gleichen Stelle.

Genau.

> Jetzt könnte ich irgendetwas messen und mein Ergebnis ist jedesmal
> anderer Wert
>
>3,2345
>234,12
>3445,1

Diese Zahlen sind ein gutes Beispiel. Sie haben alle genau 5 
signifikante Stellen.

> dann ist doch klar, dass ich als Datentyp Float nehme oder müsste ich
> mir jetzt etwa gedanken machen, ob es eine Gleit- oder Fließkommazahl
> ist
> => aber was macht es aus, ob es Gleit- oder Fließkommazahl ist?!

float ist Gleitkomma.

> mache ich mir das Leben schwer und wandle die Zahlen um in:
>
> 3,2345 -> 32345 mal 10 hoch -4
> 234,12 -> 23412 mal 10 hoch -2
> 3445,1 -> 34451 mal 10 hoch -1

Als Fixkommazahl bräuchte man für deine drei Beispielzahlen 4 Stellen 
vor und vier Stellen nach dem Komma, also zusammen 8 Stellen, während in 
Gleitkomma-Darstellung 5 Stellen für die Mantisse und eine für den 
Exponenten reichen würden, also insgesamt 6.
Deutlicher wird das, wenn man den Zahlenbereich stark vergrößert. Du 
könntest z.B. die Zahl 12345000000000000000 als 12345 mal 10 hoch 15 
speichern wollen und die Zahl 0,000000000012345 als 12345 mal 10 hoch 
-15.
Für diesen Bereich bräuchte man in Fixkomma-Darstellung schon 20 Stellen 
vor und 20 Stellen nach dem Komma. Bei einem Gleitkomma-Format würden da 
5 Stellen für die Mantisse plus zwei für den Exponenten reichen.

> und ich wüsste jetzt immer noch nicht was Gleit- und Fließkommazahl
> sind, was sie von einander unterscheidet :-$

"Fließkomma" ist nur ein anderer (fehlübersetzter) Begriff für 
"Gleitkomma".

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um das nochmal zu verdeutlichen:
Mit einen 32-bit-Float ist der kleinste positive darstellbare Wert 
1,17549 * 10 hoch -38 und der größte ist 3,40282 * 10 hoch 38.
Bei einem vorzeichenbehafteten 32-Bit-Integer wäre der kleinste
1 * 10 hoch 0 und der größte wäre 2,147483647 * 10 hoch 9.

Autor: Tym (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achja natürlich doch, soweit habe ich gar nicht betrachtet. Ich habe 
immer an übersichliche Zahlen gedacht aber wo ich jetzt das Beispiel mit 
12345000000000000000 und 0,000000000012345 wird es ganz deutlich :-)..
kein vernünftiger Mensch würde die Zahlen so darstellen.

Vielen Danke euch allen, ihr seid alle SPITZE ;-)

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.