Double
Double - typ
Typ liczbowy, 64 bitowy (8 bajtów), zmiennoprzecinkowy
Zakres: (5.0 x 10^-324 .. 1.7 x 10^308)
Double to typ liczby zmiennoprzecinkowej, zgodnej ze standardem IEEE 754, dla liczb podwojonej precyzji.
Budowa liczby jest następująca:
Postać liczby jest następująca:
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 poszerzonej precyzji: single. W środowiskach 32 bitowych, typ real często jest tożsamy z double.
Typ liczbowy, 64 bitowy (8 bajtów), zmiennoprzecinkowy
Zakres: (5.0 x 10^-324 .. 1.7 x 10^308)
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 bit | 11 bitów | 52 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 poszerzonej precyzji: single. W środowiskach 32 bitowych, typ real często jest tożsamy z double.
Dodatkowo istnieje QNaN i SNaN: QNaN to <i>quiet not-a-number</i>, a SNaN to <i>signaling not-a-number</i>. 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:
<quote>NaN - nie liczba (not a number) [na przykład wynik dzielenia przez zero]</quote>
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