Die maximal darstellbare Zahl bei double liegt bei etwas ~ 10^306 was ungefähr 2^1023 entspricht. unsigned long long bietet 2^64 und beide beanspruchen 8 Bytes. Wenn ich nun Fakultät berechne, dann würde ich ULL nehmen. Heute habe ich aber den Code gesehen, der double für diesen Zweck benutzt. Muss double nicht zu den wachsenden Zahlen hin, "Fehlerlücken" haben, sodass mehrere natürliche Zahlen nicht darstellbar sind? aus dem obigen Überlegungen würde ich sagen, ja .. die Fehlapproximationen müssen grösser 1 sein. würde gerne eure Meinung hören. grüsse
martin wrote: > Muss double nicht zu den wachsenden Zahlen hin, "Fehlerlücken" > haben, sodass mehrere natürliche Zahlen nicht darstellbar sind? Ja: http://de.wikipedia.org/wiki/Gleitkommazahl#Dezimalzahlen
double ist ein floating-point-Format, das nur eine begrenzte Genauigkeit bietet. Bei normierter Darstellung kann die Genauigkeit durch die Anzahl der signifikanten Nachkommastellen ausgedrückt werden. Normierte Darstellung bedeutet eine Vorkommastelle und ein entsprechender Exponent, also nicht 100.0, sondern 1.00 E2 Sehr große Zahlen können also durchaus absolute Fehler oder Fehlstellen enthalten.
Hallo, in64 (long long) ist exakt für ganze Zahlen zwischen -2^32 bis 2^32-1. Double, also 64Bit Floating Point, ist eine Zahl mit einer relativen Genauigkeit von 17 Stellen. also 0.12345678901234567 * 10^x. Genauer gesagt besitzt die Zahl eine 53Bit Mantisse, einen 10Bit Exponent und ein Vorzeichenbit. Ein Double ist damit exakt für alle ganzen Zahlen bis ca. +/-2^54 oder eben alles, was maximal 54 signifikante Bits braucht.
Ohne jetzt klugsch...en zu wollen ;-) > in64 (long long) ist exakt für ganze Zahlen zwischen -2^32 bis 2^32-1. int64 geht von -2^63 bis 2^63-1. > Ein Double ist damit exakt für alle ganzen Zahlen bis ca. +/-2^54 > oder eben alles, was maximal 54 signifikante Bits braucht. Oben war's noch richtig: > 53Bit Mantisse also ist der Bereich der lückenlos darstellbaren Ganzzahlen +/-2^53.
Hallo, int64 geht von -2^63 bis 2^63-1, richtig, schäm! Bei den Floats gibt es eine Konvention, die Mantisse ist normiert, so dass das erste Bit immer 1 ist, das wird dann weggelassen. Also 53Bits + 1 weggelassenes ist 54Bits. Gruss
> Genauer gesagt besitzt die Zahl eine 53Bit Mantisse, einen 10Bit > Exponent und ein Vorzeichenbit. Du bist um eins verrutscht: Nach IEEE 754 hat ein double ohne die führende 1 nur 52 Bits Mantisse, dafür aber 11 Bits Exponent. http://de.wikipedia.org/wiki/IEEE_754#Zahlenformate_und_andere_Festlegungen_des_IEEE_754-Standards Probe auf's Exempel:
1 | >>> x=2.0**53 |
2 | >>> x-1 |
3 | 9007199254740991.0 |
4 | >>> x |
5 | 9007199254740992.0 |
6 | >>> x+1 |
7 | 9007199254740992.0 |
d.h. der Unterschied zwischen 2^53-1 und 2^53 wird gerade noch aufgelöst, derjenige zwischen 2^53 und 2^53+1 nicht mehr.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.