Gleitkommarithmetik

davidh38

Bekanntes Mitglied
Ist es wahr, dass man mit Hilfe einer Gleitkommazahl größere Zahlen ungenauer darstellen kann als kleinere, weil ich ja bei größeren Zahlen noch die Stellen brauche, die sich vor dem Komma befinden. Also Beispiel:


2.3232344323 kann ich zum Beispiel genau darstellen
123232222.32 nicht so genau, weil die Mantisse ja auch gebraucht wird um die Stellen vor dem Komma in der richtigen Weise zu besetzen, rein hypothetisch mein ich natürlich und nicht auf einen single oder double bezogen, weil die beiden zahlen ja damit sicherlich dargestellt werden könnten, weil die mantisse ja viel länger ist.
 

Logaff

Bekanntes Mitglied
ich weiss nich aber ich hatte gestern etwas komisches:

Java:
float a = 0;
for(int i =1;i<=3;i++){
  a+=0.2
}
System.out.println(a) //0,600001 oder so was
 

Ark

Top Contributor
Ist es wahr, dass man mit Hilfe einer Gleitkommazahl größere Zahlen ungenauer darstellen kann als kleinere, weil ich ja bei größeren Zahlen noch die Stellen brauche, die sich vor dem Komma befinden.
Jein. Die Anzahl der zu speichernden Ziffern ist bei beiden wohl gleich groß, insofern ist keine der beiden "genauer". Dass aber Ziffern vor dem Komma Platz verbrauchen, der sonst Ziffern nach dem Komma zur Verfügung gestanden hätte, stimmt.

2.3232344323 kann ich zum Beispiel genau darstellen
123232222.32 nicht so genau
Beide Zahlen können nicht im Binärsystem mit endlich vielen Ziffern gespeichert werden, ergo: Beide Zahlen werden ungenau gespeichert. Woran man das sieht? Wenn eine Zahl im Binärsystem exakt gespeichert werden kann, dann endet die Dezimaldarstellung des Nachkommateils auf 5 oder ist exakt 0. (Ob die Umkehrung gilt, weiß ich gerade nicht.) Das ist hier (3 bzw. 2) nicht der Fall, also werden diese Zahlen so nicht exakt als double oder float gespeichert.

Ark
 

Empire Phoenix

Top Contributor
float 7 relevante Stellen double 14 wenn cih mic recht erinner. dh zb 6 vorkomma 1 nachkomma bei float, oder 1 vorkomma 6 nachkomma.

Als alternative wenn es wirklich nötig ist gibt es noch die classe BigDecimal, die ist nur vom Ram limitiert rechnet aber erheblich langsamer als float oder double (wobei float schneller ist, insbesondere bei 32 bit rechnern)
 

Oben