Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

it:float [2011/12/04 15:13]
wikisysop [Gleitkommazahlen]
it:float [2012/06/08 13:02] (aktuell)
wikisysop
Zeile 3: Zeile 3:
 Bislang dachte ich, dass Rechnen alles ist was Computer können und das obendrein noch richtig schnell aber das dem offensichtlich nicht so ist, habe ich beim Erlernen meiner ersten Programmiersprache (C) doch recht schnell herausgefunden. Schon beim studieren der Datentypen bin ich sehr rasch auf einige Unregelmäßigkeiten gestoßen. Bislang dachte ich, dass Rechnen alles ist was Computer können und das obendrein noch richtig schnell aber das dem offensichtlich nicht so ist, habe ich beim Erlernen meiner ersten Programmiersprache (C) doch recht schnell herausgefunden. Schon beim studieren der Datentypen bin ich sehr rasch auf einige Unregelmäßigkeiten gestoßen.
  
-<note important>//<​fs x-small>​Dieser Artikel ist als Nebenprodukt beim Erlernen einer Programmiersprache entstanden und ich kann nicht sicherstellen,​ dass der Inhalt vollständig und inhaltlich korrekt ist. Sollten sich Fehler eingeschlichen haben oder anderweitige Verbesserungen an der ein oder anderen Stelle sinnvoll sein, bitte ich um Korrektur.</​fs>//</​note>​+<note important>//<​fs x-small>​Dieser Artikel ist als Nebenprodukt beim Erlernen einer Programmiersprache entstanden und ich kann nicht sicherstellen,​ dass der Inhalt vollständig und inhaltlich korrekt ist. Sollten sich Fehler eingeschlichen haben oder anderweitige Verbesserungen an der ein oder anderen Stelle sinnvoll sein, bitte ich um Korrektur. Verwenden Sie hierfür bitte die Diskussionsplattform,​ am Ende des Artikels.</​fs>//</​note>​
  
 ====Das Problem==== ====Das Problem====
Zeile 32: Zeile 32:
 }</​code>​ }</​code>​
  
-Dieser Code gibt die Summen in der Variablendeklaration ​mit neun Nachkommastellen aus:+Dieser Code gibt die Summen ​der Addition bzw. Multiplikation ​in der Variableninitialisierung ​mit neun Nachkommastellen aus:
  
 <​xterm>​$ <fc #​008000>​./​float_2</​fc> ​ <​xterm>​$ <fc #​008000>​./​float_2</​fc> ​
Zeile 135: Zeile 135:
 0,0   * 2 = 0,0  → 0</​code>​ 0,0   * 2 = 0,0  → 0</​code>​
  
-Somit haben wir das Zwischenergebnis >>''<​fc #​008000>​10111,​0010</​fc>''<<,​ welches nun noch **normalisiert** werden muss. Um nur eine Ziffer (≠ 0) vor dem Komma stehen zu haben, muss dass Komma um vier Stellen nach links verschoben werden, dass entspricht einer Multiplikation mit >>''<​fc #​008000>​2<​sup>​4</​sup></​fc>''<<​. Für die normalisierte Darstellung erhalten wir demnach: ''<​fc #​008000>​1,​0111001 * 2<​sup>​4</​sup></​fc>''​. Die Mantisse wird nun ohne der ersten >>​1<<​ gespeichert (>>​hidden bit<<​) und ergibt somit: ''<​fc #008000>10111001</​fc>'',​ die restlichen Stellen, werden mit Nullen aufgefüllt. ​+Somit haben wir das Zwischenergebnis >>''<​fc #​008000>​10111,​0010</​fc>''<<,​ welches nun noch **normalisiert** werden muss. Um nur eine Ziffer (≠ 0) vor dem Komma stehen zu haben, muss dass Komma um vier Stellen nach links verschoben werden, dass entspricht einer Multiplikation mit >>''<​fc #​008000>​2<​sup>​4</​sup></​fc>''<<​. Für die normalisierte Darstellung erhalten wir demnach: ''<​fc #​008000>​1,​0111001 * 2<​sup>​4</​sup></​fc>''​. Die Mantisse wird nun ohne der ersten >>​1<<​ gespeichert (>>​hidden bit<<​) und ergibt somit: ''<​fc #008000>0111001</​fc>'',​ die restlichen Stellen, werden mit Nullen aufgefüllt. ​
  
 Der Exponent ist >>''<​fc #​008000>​4<​sub>​10</​sub></​fc>''<<,​ was >>''<​fc #​008000>​100<​sub>​2</​sub></​fc><<''​ entspricht. Nun wird noch der >><​fc #​008000>​Bias</​fc><<​ (''<​fc #​008000>​127</​fc>''​) auf den Exponenten addiert: ''<​fc #​008000>​4<​sub>​10</​sub>​ + 127<​sub>​10</​sub>​ = 131<​sub>​10</​sub>​ = 10000011<​sub>​2</​sub></​fc>''​. Setzt man nun diese ermittelten Werte zusammen kommen wir zu folgendem Ergebnis: Der Exponent ist >>''<​fc #​008000>​4<​sub>​10</​sub></​fc>''<<,​ was >>''<​fc #​008000>​100<​sub>​2</​sub></​fc><<''​ entspricht. Nun wird noch der >><​fc #​008000>​Bias</​fc><<​ (''<​fc #​008000>​127</​fc>''​) auf den Exponenten addiert: ''<​fc #​008000>​4<​sub>​10</​sub>​ + 127<​sub>​10</​sub>​ = 131<​sub>​10</​sub>​ = 10000011<​sub>​2</​sub></​fc>''​. Setzt man nun diese ermittelten Werte zusammen kommen wir zu folgendem Ergebnis:
it/float.1323007997.txt.gz (17839 views) · Zuletzt geändert: 2011/12/04 15:13 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0