Datentypgrössen

javastudent25

Bekanntes Mitglied
hallo

wenn ich die Datentypen so ansehe, gibt es beim Programmieren ja nur Typen, die maximal 64bit aufweisen. 2 hoch 64 ist eine sehr grosse Zahl, aber weshalb kann mein TR Voyage 200 dann zB 2 hoch 1500 rechnen?
Wie geht das dann? Wie ist soetwas programmiert, was für Datentypen werden da verwendet??

Ich blick das irgendwie nicht..
 

knilch

Bekanntes Mitglied
Sehr grosse Zahlen werden vielfach in exponential bzw. in der wissenschaftlichen Schreibweise dargestellt und damit auch so berechnet. Du kannst eine Zahl z.B. 1 Billion als 1'000'000'000'000 = 10^12 darstellen oder 1e12. Mit der wissenschaftlichen Darstelleung können wesentlich göhere Zahlen als 2^64 berechnet werden. Mit Java-double sind: 2^1023 bzw. 2^-1074. die max. bzw. min Werte. (https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html und https://de.wikibooks.org/wiki/Java_Standard:_Primitive_Datentypen). Dies ist nur möglich, wenn Zahlen im wissenschatlichen Format berechnet werden.
So grosse Zahlen haben allerdings ein Problem mit der Genauigkeit. Grund dazu siehe: https://de.wikipedia.org/wiki/IEEE_754. Somit sind so grosse Zahlen nur Annäherungen, keine genaue Zahlen. (Das selbe gilt auch für Taschenrechner. Diese berechnen auch nur Annährerungen)
 
Zuletzt bearbeitet:

JuKu

Top Contributor
Es gibt in Java auch komplexe Datentypen für sowas, die nicht limitiert sind, z.B. BigInteger, dieser wird automatisch erweitert, wenn die Zahl 200 Bytes braucht, werden halt so viele Bytes dafür reserviert.
 

JStein52

Top Contributor
Und ums komplett zu machen BigDecimal ! Damit kannst du so genau rechnen wie du Speicher hast um die benötigten Zahlen abzuspeichern. Rechnungen damit sind aber langsam weil ja im Hintergrund einiges abläuft.
 

InfectedBytes

Top Contributor
Außerdem sind die letzten beiden keine primitiven Datentypen, sondern Objekte. Dementsprechend darfst du dort nicht einfach +- etc verwenden, sondern Methoden: x.add(y)
 

JuKu

Top Contributor
Objekte sind aber auch wiederum komplexe Datentypen. :D
Der Thread Ersteller hat nur nach Datentypen und nicht nach primitiven Datentypen gefragt. :D

Die Performance könnte wirklich ein Problem bei BigDecimal sein.
 

JStein52

Top Contributor
Die Performance könnte wirklich ein Problem bei BigDecimal sein.

Auf jeden Fall. Gerade wenn man zum Beispiel hohe Genauigkeit oder sehr viele Stellen braucht hat man meist auch einen Algorithmus der sehr viele Rechnungen ausführt. Du kannst ja mal versuchen die Zahl Pi mit einer Reihenentwicklung auf ein paar hundert stellen genau auszurechnen. Geht aber man braucht Geduld.
 

javastudent25

Bekanntes Mitglied
Auf jeden Fall. Gerade wenn man zum Beispiel hohe Genauigkeit oder sehr viele Stellen braucht hat man meist auch einen Algorithmus der sehr viele Rechnungen ausführt. Du kannst ja mal versuchen die Zahl Pi mit einer Reihenentwicklung auf ein paar hundert stellen genau auszurechnen. Geht aber man braucht Geduld.


Ja das hatte ich hier schon gemerkt :)

ja passt der Wert wird bis zu 6 Stellen gut erreicht, danach wirds mühsam... weil auch die Terme immer kleiner werden mit den Iterationen

6.535901571069758E-7
6.535895602510777E-7
3.141592000000233
Der wirkliche Wert ist: 3.141592653589793
 

Neue Themen


Oben