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:
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 poszerzonej precyzji: single. W środowiskach 32 bitowych, typ real często jest tożsamy z double.


Kategoria: Delphi, Delphi » Rzeczywiste

2 komentarze

Avatar: rincewind
Napisany 2010-10-15 16:50 przez rincewind

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

Brak avatara
Napisany 2010-10-09 11:36 przez olo16

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

4programmers.net