Kleinster Double ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

Kleinster Double ?

Beitrag von lisan » 29.03.2004 10:15:34

Ich muss fuer einen rng (random number generator) wissen, welches die kleinst moegliche zahl ist.

Das ganze ist ein double und haengt natuerlich vom prozi ab.
sizeof (double) gibt ne 8 also 32 bit vor und nachkomma , richtig ?
Was ist nun die kleinste verarbeitbare double zahl bei sizeof(double)=8 ?
Eigendlich isses mir ja klar aber leider kann ich mit printf noch kleinere zahlen ausgeben als ich ausrechne.

Gruss,
Arvd.

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 30.03.2004 18:40:49

Au weia....

Also: double ist 64 Bit lang (8 Byte), die folgendermassen aufgeteilt sind: 1 Bit Vorzeichen, 53 Bit Mantisse, 10 Bit Exponent.

Das ganze entspricht Floating Point Zahlen nach dem IEEE754 Standard, und glaubst gar nicht *wie* verdammt kompliziert das ist... ;-)

Bevor ich Dich hier jetzt mit einem langen Traktat zutexte, wie diese Nummer zustande kommt, lies doch einfach: info libc (Paket libc6-doc) und suche (Strg-S) dort nach "DBL_MIN". Auf der Seite sind die ganzen Makros erklärt, die man dazu benutzen kann.

Kurzfassung:

Code: Alles auswählen

#include <float.h>
double minimum = DBL_MIN;
...
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

chhab
Beiträge: 36
Registriert: 16.10.2003 22:16:56
Wohnort: Haimhausen
Kontaktdaten:

Beitrag von chhab » 30.03.2004 19:03:00

Hallo lisan,

hier die Eigenschaften eines gebräuchlichen double-float (aus dem C-Reference-Manual CRefVim kopiert):

Code: Alles auswählen

  Radix:      2
  Sign:       1 bit,  = 0 positive, = 1 negative
  Exponent:   11 bit, bias 1023
  Mantissa:   52 bit, 53 bit resolution
  Total Size: 64 bit
  Range:      2.2250738585072014e-308...1.7976931348623158e+308
  Precision:  >= 15 (number of digital digits of precision)
  given x, next is:   x * (1 + 2.2204460492503131e-16)

  Bit:  63  62         52  51                     0
         s   eeeeeeeeeee    mmmmmmmm...mmmmmmmmmmmm

         s: signe
         e: exponent
         m: mantissa 
Demnäch wäre die betragsmäßig kleinste darzustellende Zahl 2.2250738585072014e-308.

Das Ganze ist aber systemabhängig. Die Bitanzahl und die Bitpositionen sind nicht standardisiert.
sizeof (double) gibt ne 8 also 32 bit vor und nachkomma , richtig ?
Das stimmt so nicht. Einen möglichen Aufbau habe ich oben bereits beschrieben. Wenn du mehr wissen willst, siehe z.B. hier:
http://www.artima.com/underthehood/floating.html


@pdreker: IEEE 754 wurde inzwischen durch IEC 60559, soweit ich weiß.

Viele Grüße
Christian

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 30.03.2004 21:08:13

@pdreker: IEEE 754 wurde inzwischen durch IEC 60559, soweit ich weiß.
Kann sein, aber das funktioniert genauso...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
lisan
Beiträge: 658
Registriert: 22.02.2003 19:05:04
Wohnort: Berlin
Kontaktdaten:

Beitrag von lisan » 31.03.2004 12:07:47

Danke euch, das reicht mir.

Das mit den 32 vor und nachkomma vergesst ganz schnell, sonst darf ich nochmal studieren.

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 31.03.2004 13:00:55

lisan hat geschrieben:Danke euch, das reicht mir.

Das mit den 32 vor und nachkomma vergesst ganz schnell, sonst darf ich nochmal studieren.
Habe diesen Post mal an deinen Prof weitergeleitet ;)

Antworten