www.mikrocontroller.net

Forum: PC-Programmierung double vs unsigned long long


Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: noch einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: noch einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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#Zahlenformat...

Probe auf's Exempel:
>>> x=2.0**53
>>> x-1
9007199254740991.0
>>> x
9007199254740992.0
>>> x+1
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.