# Nachkommastellen double



## The_S (22. Mrz 2007)

Hi,

irgendwie ne blöde Frage, aber wieviele Nachkommastellen kann ein double haben? Double hat doch die doppelte Genauigkeit, also die doppelte Anzahl an Nachkommastellen eines floats (7) und somit 14!? Zumindest dachte ich das bis jetzt. Hab gerade ein double mit mehr Nachkommastellen erstellt


```
double d = 3.1234567890123451634;
		System.out.println(d);
```

Dabei werden alle Nachkommastellen bis zur 15. (!!) Stelle korrekt ausgegeben und die 16. dann nach irgendeinem komischen Schema, abhängig von den Stellen ab 15 (zumindest soweit ich das beurteilen kann). Der Rest wird abgeschnitten.

Kann mich da mal jemand aufklären? Danke!


----------



## schalentier (22. Mrz 2007)

Liegt an der Art der Speicherung von float und double. 

Siehe:
http://www.pronix.de/pronix-664.html


----------



## The_S (22. Mrz 2007)

Danke schonmal, aber zum Einen ist das C und nicht Java, zum Anderen ist das vermutlich auch nicht allgemein übertragbar, da hier beschrieben wird, dass ein float nur 6 Nachkommastellen hat. Ich kann in Java aber definitiv 7 Nachkommastellen verwenden und zu guter Letzt erklärt es in keinster weiße das komische Verhalten der 16. Stelle ...

Oder hab ich in dem Artikel was übersehen? Danke!


----------



## Wildcard (22. Mrz 2007)

http://docs.sun.com/source/806-3568/ncg_goldberg.html
Sowas kann man nicht pauschal beantworten da double eben Gleitkommazahlen speichert.
Weiterhin wird ohne das strictfp Keyword nicht die IEEE Vorgabe verwendet, sondern die intern meist höhere Genauigkeit der CPU.


----------



## thE_29 (22. Mrz 2007)

@Hobbit: da sind c und java ziemlich gleich ^^

Deswegen rechnen wir auch immer alles in long * dezimal stellen, da es einfach zu Ungenauigkeitsproblemen auftritt (aufeinmal hat man statt 3.0 2,9999999999) usw..

Bei Floating Operationen kann es schnell und leicht zu sowas kommen! Nur tritt es in sehr geringen oder komischen Fällen auf und daher wenn man es beim Testen denkt, hey das geht dann interessiert das meistens keinen 

Hatten wir erst vor einem halben Jahr, das bei ein paar Werten aufeinmal nachkommastellen da waren oder weg waren..


----------



## The_S (22. Mrz 2007)

Ja gut, dass es zu Rundungsfehlern kommen kann ist mir bewusst. Aber wenigstens ist jetzt mal geklärt, dass ein double 15 Nackommastellen hat (kA wie ich auf 14 gekommen bin).

Was bleibt, ist die mysteriöse 16. Stelle, die völlig unkontrolliert erscheint und nichts mti der Angabe zu tun hat. Manchmal erscheint sie ja auch gar net.

Wenn ihr mir hierzu noch ne Erklärung liefern könnt bin ich glücklich  .


----------



## Wildcard (22. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Ja gut, dass es zu Rundungsfehlern kommen kann ist mir bewusst. Aber wenigstens ist jetzt mal geklärt, dass ein double 15 Nackommastellen hat (kA wie ich auf 14 gekommen bin).


Wi kommst du darauf?


----------



## The_S (22. Mrz 2007)

Weil ichs ausprobiert hab, ohne 16. Stelle


----------



## Wildcard (22. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Weil ichs ausprobiert hab, ohne 16. Stelle


Ist aber Blödsinn. Hängt von der CPU ab, hängt von der Anzahl der Stellen vor dem Komma ab, hängt von der binären Schreibweise der Zahl ab.


----------



## The_S (22. Mrz 2007)

naja, aber es sin schonmal rein theoretisch bis zu 15 Nachkommastellen möglich, mehr wollt ich gar net wissen  .


----------



## thE_29 (22. Mrz 2007)

Speicher es in nem String ab :bae:


----------



## Wildcard (22. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> naja, aber es sin schonmal rein theoretisch bis zu 15 Nachkommastellen möglich, mehr wollt ich gar net wissen  .


Es sind rein theoretisch hunderte von Nachkommastellen möglich, sowie auch gar keine.


----------



## The_S (22. Mrz 2007)

@thE_29

Hilft mir aber wenig, wenn ich (wie in meinem Fall) jemanden den Datentyp double erklären muss (ebenfalls  )

ot: Meine Posts zu deiner Registry-Lib ignorierst du gekonnt  ?

@wildcard

? Warum denn 100? Wie geht das denn, also unter welchen Vorraussetzungen?


----------



## Wildcard (22. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Hilft mir aber wenig, wenn ich (wie in meinem Fall) jemanden den Datentyp double erklären muss (ebenfalls  )


Dann erklär ihm keinen Blödsinn. Die Anzahl der Nachkommstellen ist abhängig davon wo die erste 1 in der Mantisse gesetzt werden muss. Da kann man nicht einfach sagen 'Double speichert 15 Kommastellen'


----------



## The_S (22. Mrz 2007)

ich glaub das wird mir jetzt alles n bisschen zu komplex ... ich programmier doch erst seit 2,5 Jahren *heul* .

Ich erzähl einfach, es gibt float für wenig nachkommastellen und double für viele. Aber am Besten verwendeste BigDecimal  .


----------



## Wildcard (22. Mrz 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> ich glaub das wird mir jetzt alles n bisschen zu komplex ... ich programmier doch erst seit 2,5 Jahren *heul* .


Ich auch, also heul hier nicht rum  :bae:


----------



## The_S (22. Mrz 2007)

Wildcard hat gesagt.:
			
		

> Hobbit_Im_Blutrausch hat gesagt.:
> 
> 
> 
> ...



*anmeldedatum überprüf* => ist mit meinem ca. identisch
*erste postings überprüf* => Oo . Wenn du erst seit 2,5 Jahren programmierst, hast du ja n ganz schönes Tempo vorgelegt ... Du hast allein bei deinen 1. Posts Fragen beantwortet, die ich n halbes Jahr später erstmal ansatzweise nachvollziehen konnte (so grob geschätzt). Oder alternativ bin ich auch einfach nur verdammt langsam


----------



## Marco13 (22. Mrz 2007)

Die Anzahl der Nackommastellen ist nicht das, worum es geht. Man spricht dabei (wenn ich mich nicht irre) von der Anzahl der _signifikanten_ Stellen (also die Stellen, die wirklich Informationen enthalten, und nicht nur durch einen kleinen Exponenten weit hinters Komma gerutscht sind).

Ob 15 oder 16 hängt u.a. davon ab, welche Zahl denn hinter dem Komma steht. Manche Zahlen lassen sich binär genau darstellen, andere nicht. Und was die toString-Methode von Java dann daraus macht, ist nochmal eine GANZ andere Frage!


----------



## The_S (22. Mrz 2007)

Gut, danke an alle  . Ich hake das mal als erledigt ab


----------

