Programowanie w języku Delphi

Double

  • 2014-03-28 20:33
  • 2 komentarze
  • 3764 odsłony
  • Oceń ten tekst jako pierwszy
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 komentarze

rincewind 2010-10-15 16:50

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:
<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

olo16 2010-10-09 11:36

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