Podpisany zero - Signed zero

Podpisana zerowy jest zerowy z towarzyszącym znakiem . W zwykłej arytmetyce liczba 0 nie ma znaku, więc -0, +0 i 0 są identyczne. Jednak w obliczeniach niektóre reprezentacje liczbowe dopuszczają istnienie dwóch zer, często oznaczanych przez −0 ( zero ujemne ) i +0 ( zero dodatnie ), uważanych za równe przez operacje porównania numerycznego, ale z możliwymi różnymi zachowaniami w poszczególnych operacjach. Dzieje się tak w reprezentacjach liczb całkowitych ze znakiem i wielkością oraz w dopełnieniu do jedynek , a także w większości reprezentacji liczb zmiennoprzecinkowych . Liczba 0 jest zwykle zakodowana jako +0, ale może być reprezentowana przez +0 lub -0.

Standard IEEE 754 dla arytmetyki zmiennoprzecinkowej (obecnie używany przez większość komputerów i języków programowania obsługujących liczby zmiennoprzecinkowe) wymaga zarówno +0, jak i -0. Arytmetyka rzeczywista ze znakiem zer może być uważana za wariant rozszerzonej linii liczb rzeczywistych taki, że 1/−0 = − i 1/+0 = +∞; podział jest nieokreślony tylko dla ± 0/±0 i ±∞/±∞.

Zero ze znakiem ujemnym odzwierciedla koncepcję analizy matematycznej polegającą na zbliżaniu się do 0 od dołu jako jednostronnej granicy , która może być oznaczona przez x  → 0 , x  → 0− lub x  → ↑0. Notacja „-0” może być używana nieformalnie do oznaczenia liczby ujemnej, która została zaokrąglona do zera. Pojęcie ujemnego zera ma również pewne teoretyczne zastosowania w mechanice statystycznej i innych dyscyplinach.

Twierdzi się, że uwzględnienie zera ze znakiem w IEEE 754 znacznie ułatwia osiągnięcie dokładności numerycznej w niektórych krytycznych problemach, w szczególności podczas obliczeń ze złożonymi funkcjami elementarnymi. Z drugiej strony, pojęcie zera ze znakiem jest sprzeczne z ogólnym założeniem przyjmowanym w większości dziedzin matematycznych, że zero ujemne jest tym samym co zero. Reprezentacje, które dopuszczają ujemne zero, mogą być źródłem błędów w programach, jeśli twórcy oprogramowania nie wezmą pod uwagę, że podczas gdy dwie reprezentacje zerowe zachowują się tak samo w przypadku porównań numerycznych, dają różne wyniki w niektórych operacjach.

Reprezentacje

Powszechnie stosowane kodowanie dopełniacza do dwóch nie pozwala na ujemne zero. W 1+7-bitowej reprezentacji znaku i wielkości liczb całkowitych ujemne zero jest reprezentowane przez ciąg bitów 1000 0000 . W 8-bitowej reprezentacji uzupełnienia do jedynki ujemne zero jest reprezentowane przez ciąg bitów 1111 1111 . We wszystkich trzech kodowaniach dodatnie zero jest reprezentowane przez 0000 0000 . Są to jednak rzadko spotykane formaty, najczęstszymi formatami, w tym ujemnymi zerami, są formaty zmiennoprzecinkowe IEEE 754, opisane poniżej.

Ujemne zero według reprezentacji IEEE 754 w formacie binarnym32

W IEEE 754 liczb zmiennoprzecinkowych binarnych wartości zera są reprezentowane przez stronniczych wykładnik i mantysy zarówno zerowej. Ujemne zero ma bit znaku ustawiony na jeden. Ujemne zero można otrzymać w wyniku pewnych obliczeń, na przykład jako wynik niedomiaru arytmetycznego na liczbie ujemnej lub −1.0×0.0, lub po prostu jako −0.0.

W dziesiętnym kodowaniu zmiennoprzecinkowym IEEE 754 ujemne zero jest reprezentowane przez wykładnik będący dowolnym prawidłowym wykładnikiem w zakresie dla kodowania, przy czym prawdziwe znaczenie i wynosi zero, a bit znaku to jeden.

Właściwości i obsługa

Standard zmiennoprzecinkowy IEEE 754 określa zachowanie dodatniego zera i ujemnego zera w różnych operacjach. Wynik może zależeć od bieżących ustawień trybu zaokrąglania IEEE .

Notacja

W systemach, które zawierają zarówno zera ze znakiem, jak i bez znaku, notacja i jest czasami używana dla zer ze znakiem.

Arytmetyka

Dodawanie i mnożenie są przemienne, ale istnieją pewne specjalne zasady, których należy przestrzegać, co oznacza, że ​​zwykłe zasady matematyczne uproszczenia algebraicznego mogą nie mieć zastosowania. Poniższy znak pokazuje otrzymane wyniki zmiennoprzecinkowe (nie jest to zwykły operator równości).

Podczas mnożenia lub dzielenia zawsze stosuje się zwykłą zasadę dotyczącą znaków:

  • (dla różnych od ±∞)
  • (dla różnych od 0)

Istnieją specjalne zasady dodawania lub odejmowania ze znakiem zero:

  • (dla różnych od 0)
  • (dla dowolnego skończonego , -0 przy zaokrąglaniu w kierunku ujemnym)

Z powodu ujemnego zera (a także gdy tryb zaokrąglania jest w górę lub w dół), wyrażenia −( xy ) i (− x ) − (− y ) dla zmiennych zmiennoprzecinkowych x i y , nie mogą być zastąpione przez yx . Jednak (−0) + x można zastąpić przez x z zaokrągleniem do najbliższej (z wyjątkiem sytuacji, gdy x może być sygnalizacyjnym NaN ).

Kilka innych specjalnych zasad:

  • (zgodnie z zasadą znaku dla podziału)
  • (dla wartości niezerowych , stosuje się regułę znaku dla dzielenia)
  • ( Nie liczba ani przerwanie dla nieokreślonej formy )

Dzielenie liczby niezerowej przez zero ustawia flagę dzielenia przez zero , a operacja generująca NaN ustawia flagę nieprawidłowej operacji. Obsługi wyjątku jest nazywany jeśli włączona do odpowiedniej flagi.

Porównania

Zgodnie ze standardem IEEE 754 zero ujemne i zero dodatnie powinny być porównywane ze zwykłymi (numerycznymi) operatorami porównania, takimi jak ==operatory C i Java . W tych językach mogą być potrzebne specjalne sztuczki programistyczne, aby rozróżnić dwie wartości:

  • Wpisz przestawiając liczbę na typ całkowity, aby spojrzeć na bit znaku we wzorcu bitowym;
  • użycie funkcji ISO C copysign()(operacja IEEE 754 copySign) do skopiowania znaku zera na jakąś niezerową liczbę;
  • użycie signbit()makra ISO C (operacja IEEE 754 isSignMinus), które zwraca, czy bit znaku liczby jest ustawiony;
  • biorąc odwrotność zera, aby otrzymać 1/(+0) = +∞ lub 1/(−0) = −∞ (jeśli wyjątek dzielenia przez zero nie jest uchwycony).

Uwaga: Rzutowanie do typu integralnego nie zawsze będzie działać, szczególnie w systemach dopełniaczy dwójkowych.

Jednak niektóre języki programowania mogą udostępniać alternatywne operatory porównania, które rozróżniają dwa zera. Tak jest na przykład w przypadku metody równości w Doubleklasie wrappera Javy .

W zaokrąglonych wartościach, takich jak temperatury

Nieformalnie można użyć notacji „-0” dla wartości ujemnej, która została zaokrąglona do zera. Ta notacja może być przydatna, gdy znak ujemny jest znaczący; na przykład podczas zestawiania temperatur w stopniach Celsjusza , gdzie znak ujemny oznacza poniżej zera .

W mechanice statystycznej

W mechanice statystycznej czasami używa się ujemnych temperatur do opisu układów z inwersją populacji , które można uznać za mające temperaturę większą niż nieskończoność dodatnia, ponieważ współczynnik energii w funkcji rozkładu populacji wynosi −1/Temperatura. W tym kontekście temperatura -0 jest (teoretyczną) temperaturą większą niż jakakolwiek inna ujemna temperatura, odpowiadająca (teoretycznemu) maksymalnemu wyobrażalnemu zakresowi inwersji populacji, przeciwna skrajność do +0.

Zobacz też

Bibliografia

Dalsza lektura