IEEE 754

standard reprezentacji binarnej i operacji na liczbach zmiennoprzecinkowych

IEEE 754 – standard reprezentacji binarnej i operacji na liczbach zmiennoprzecinkowych (IEEE floating-point standard), implementowany powszechnie w procesorach i oprogramowaniu obliczeniowym.

Reprezentacja zmiennoprzecinkowa IEEE-754 single

Liczbę pojedynczej precyzji w formacie IEEE-754 zapisujemy za pomocą trzydziestu dwóch bitów. Pierwszym bitem jest bit znaku S (sign). Jeśli liczba jest ujemna, oznacza to, iż S przyjmie wartość 1. Jeśli jest dodatnia, S jest równe zero. Dalej następuje 8 bitów kodujących wykładnik 2 (cecha), przy czym kodowanie cechy jest kodowaniem z nadmiarem (BIAS, w tym przypadku BIAS=127), co daje zakres wykładników przy czym najmniejsza i największa wartość wykładnika ma znaczenie specjalne (patrz niżej szczególne przypadki). Kolejne 23 bity to mantysa liczby, przy czym pomija się wiodący, niezerowy bit. Daje to około 7–8 dziesiętnych miejsc znaczących i zakres od około ±1,18·10−38 do około ±3,4·1038. Zakres taki może wydawać się wystarczający w prostych obliczeniach, lecz jego użycie nastręcza trudności, gdy istnieje potrzeba stosowania niektórych stałych fizycznych (jak np. stała Plancka), często też może prowadzić do występowania błędów przepełnienia podczas obliczeń pośrednich, jeśli ich wynik wykroczy poza reprezentowany zakres.

Oprócz tego zdefiniowano szczególne przypadki:

  • +0 – wszystkie bity są zerami (wykładnik jest równy -127 w kodzie z nadmiarem lub zero w kodzie binarnym),
  • -0 – bit znaku jest ustawiony, reszta jest zerami (tu także wykładnik jest równy -127 w kodzie z nadmiarem lub zero w kodzie binarnym)
  • liczby małe – ang. denormalized numbers lub coraz częściej subnormal numbers – wykładnik jest równy -127 w kodzie z nadmiarem lub zero w kodzie binarnym, mantysa różna od 0, nie zakłada się wiodącego niezerowego bitu; są to liczby zbyt małe, aby mogły być reprezentowane z taką samą precyzją jak „zwykłe” liczby
  • – ustawione wszystkie bity wykładnika (wykładnik jest równy 128 w kodzie z nadmiarem lub 255 w kodzie binarnym), mantysa równa 0, może się pojawić np. jako wynik dzielenia przez 0
  • NaNang.: Not a Number, ustawione wszystkie bity wykładnika (wykładnik jest równy 128 w kodzie z nadmiarem lub 255 w kodzie binarnym), mantysa różna od 0, może się pojawić np. jako wynik pierwiastkowania liczby ujemnej. Definiuje się także „ciche” i „głośne/sygnalizujące” nie-liczby. Różnią się one tym, że w „cichych” nie-liczbach najstarszy bit mantysy jest równy 1, a w „głośnych/sygnalizujących” jest on równy 0. Pozostałe bity mantysy mogą być dowolne (można je wykorzystać do zakodowania typu napotkanego błędu).

Standard definiuje również liczby podwójnej precyzji, których zapis składa się z 64 bitów, przy czym na wykładnik przypada 11 bitów (BIAS=1023), a na mantysę 52 bity (oraz wiodąca pominięta jedynka). Liczby podwójnej precyzji reprezentują około 16 dziesiętnych miejsc znaczących, a ich zakres stosowalności rozciąga się od około ±2,2·10−308 do około ±1,8·10308. W czasach, gdy popularne komputery nie miały koprocesorów matematycznych, koszt prowadzenia obliczeń w pojedynczej precyzji był znacząco niższy od kosztu obliczeń w podwójnej precyzji, więc mimo oczywistych niedostatków powszechnie korzystano z tych pierwszych. Obecnie jednak ta różnica nie jest aż tak znacząca i obliczenia w podwójnej precyzji są znacznie częściej stosowane.

Istnieją też inne formaty liczb zmiennoprzecinkowych, jak np. 10-bajtowe (obsługiwane sprzętowo przez popularne procesory kompatybilne z x86), 16-bajtowe (procesory przeznaczone na rynek superkomputerów), jak też i formaty o mniejszej precyzji, używane m.in. przez procesory graficzne.

Zobacz też edytuj

Linki zewnętrzne edytuj