Double

Szczawik

Double - typ

Typ liczbowy, 64 bitowy (8 bajtów), zmiennoprzecinkowy

Zakres: (5.0 x 10-324 .. 1.7 x 10308)

Double to typ liczby zmiennoprzecinkowej, zgodnej ze standardem IEEE 754, dla liczb podwojonej precyzji.

Budowa liczby jest następująca:

Znak (Z)Cecha (C)Mantysa (M)
1 bit11 bitów52 bity
Postać liczby jest następująca: `(-1)^Z * 0,M * 2^(C-1023)`

Bit znaku:
0 oznacza +
1 oznacza -

Przesunięcie cechy o 1023 pozwala na tworzenie cechy dwójkowej z zakresu 2(-1023) .. 2(1024).

Wartości specjalne:
Infinity - nieskończoność dodatnia
NegInfinity - nieskończoność ujemna
NaN - nie liczba (not a number) [na przykład wynik dzielenia przez zero]

Zero w liczbach zmiennoprzecinkowych może posiadać znak + albo -. Różnica wynika z obliczeń, jakie dały taki wynik - jest to wykorzystywane przez niektóre operacje matematyczne.

Typ double posiada bliźniaczy typ o mniejszej precyzji: Single. W środowiskach 32 bitowych, typ Real często jest tożsamy z double.

2 komentarzy

Dodatkowo istnieje QNaN i SNaN: QNaN to quiet not-a-number, a SNaN to signaling not-a-number. SNaN powoduje wyjątek procesora, gdy następuje próba operacji na nim; QNaN nie powoduje wyjątku, ale wszelkie operacje z QNaN w wyniku dają QNaN.

SNaN nie powstaje w wyniku żadnych operacji na liczbach, można go jednak ustawić ręcznie.

Ponadto:

NaN - nie liczba (not a number) [na przykład wynik dzielenia przez zero]

Nieprawda, to jest wynik działań nieoznaczonych: Inf*0, Inf/Inf, 0/0, log(liczba_ujemna) etc. Dzielenie przez 0 jest bardziej subtelne (stąd też dwie wartości: +0 i -0):

  • liczba dzielona przez +0 daje w wyniku lim_{x->0+}(dzialanie), a przez -0 daje lim_{x->0-}(dzialanie), czyli prawostronną (dla +0) i lewostronną (dla -0) granicę. W efekcie mamy:
    +1 / +0 = +Inf
    -1 / +0 = -Inf
    +1 / -0 = -Inf
    -1 / -0 = +Inf

0 to też wartość specjalna. No i jest +0 i -0.