Rozważmy reprezentację punktu stałego, którą można uznać za zdegenerowany przypadek liczby zmiennoprzecinkowej. Całkowicie możliwe jest użycie uzupełnienia 2 dla liczb ujemnych. Ale dlaczego bit znaku jest potrzebny do liczb zmiennoprzecinkowych, czy bity mantysy nie powinny używać uzupełnień 2?
Również dlaczego bity wykładnikowe używają odchylenia zamiast reprezentacji wielkości ze znakiem (podobnej do bitów mantysy) lub reprezentacji uzupełnienia 2?
Aktualizacja: Przepraszam, jeśli nie wyjaśniłem. Szukałem powodu, w jaki sposób kształtowana jest reprezentacja zmiennoprzecinkowa. Jeśli nie ma silnego kompromisu w zakresie wdrażania między alternatywami, to czy ktoś mógłby wyjaśnić historyczne aspekty reprezentacji zmiennoprzecinkowej?
Z Wikipedii:
Uzupełnienie do dwóch jest reprezentacją liczb ujemnych, które akurat są bardzo wygodne. To jest cały powód, aby w ogóle go używać.
Para mantysa-wykładnik jest reprezentacją liczby zmiennoprzecinkowej. W większości przypadków, gdy używasz liczb zmiennoprzecinkowych, nie wykonujesz arytmetyki wyłącznie na mantysie lub wyłącznie na wykładniku wykładniczym.
źródło
Fałszywe założenie. To nie jest konieczne. Jestem prawie pewien, że spotkałem formaty zmiennoprzecinkowe, które używały uzupełnienia 2 dla mantysy, ale musiałbym wykopać się po nazwy.
Nie jestem specjalistą od analizy numerycznej, ale rozumiem, że podpisanie zera jest dla nich ważne. Prawdopodobnie łatwiej jest nim manipulować niż uzupełnieniem. Było to prawdopodobnie kryterium wyboru dla IEEE-754.
Znów jest to coś niepotrzebnego, a niektórzy zrobili coś inaczej.
Jest to reprezentacja, dla której łatwiej jest wykonać implementację sprzętową dla zestawu operacji wykonywanych na wykładnikach (i tutaj nie jest wymagana reprezentacja dla -0).
Jedną z konsekwencji tego wyboru jest to, że możesz użyć porównania liczb całkowitych ze znakiem, aby porównać numer FP, jeśli nie przejmujesz się NaN, co być może było kryterium dla niektórych (fakt, że NaN wymaga specjalnej obsługi, wątpię, by to nie było dla IEEE-754).
źródło
IEEE 754 używa znaku / wielkości, a nie uzupełnienia dwóch lub jednego uzupełnienia.
Uzupełnienie dwóch ma tę wadę, że zakres dodatni i ujemny nie są identyczne. Jeśli wszystkie wzory bitowe są poprawne, to masz liczby x, których nie można łatwo obliczyć -x. To źle. Alternatywą jest to, że istnieją nieprawidłowe wzorce bitów, co również jest złe. W IEEE 754 nie ma niepoprawnych wzorów bitów dla zmiennoprzecinkowych 64 lub 32 bitów, więc nie musisz się tym martwić.
Uzupełnienie jednego dopełniałoby mnożenie / dzielenie bardziej złożone (przy podpisanej wielkości, po prostu xor znaków i traktujesz mantysę jako liczbę bez znaku). Jeśli chodzi o dodawanie i odejmowanie, naprawdę nie chcę myśleć o dodawaniu i odejmowaniu w uzupełnieniu, powoduje to ból głowy.
źródło
Po podpisaniu zer daje większą ekspresję, co może być przydatne w obliczeniach numerycznych. Strona wikipedii „ Podpisano zero ” mówi:
WH Kahan, jeden z głównych projektantów zmiennoprzecinkowych IEEE 754, jest z tych powodów zwolennikiem podpisania zera. Jego opinia prawdopodobnie będzie miała dużą wagę.
źródło
Myślę, że ważne jest, aby zrozumieć, że obliczenia zmiennoprzecinkowe dają wartości przybliżone , a nie dokładne . Oznacza to, że jeśli obliczenia zmiennoprzecinkowe dają zakodowaną wartość X, to reprezentuje to teoretycznie idealną wartość, która prawie na pewno NIE jest X, ale jest w zakresie [X .. X + e) {gdzie „e” to „ machine epsilon ”, tzn. nie ma liczby zmiennoprzecinkowej między X a X + e}. Mówiąc dokładniej, zmiennoprzecinkowe zero reprezentuje idealną liczbę, która prawdopodobnie nie jest dokładnie zerowa, ale która jest zbyt mała, aby reprezentować ją z niezerową wartością zakodowaną w zmiennoprzecinkowym punkcie.
Biorąc pod uwagę, że użycie reprezentacji znak i wielkość jest sposobem na umożliwienie kodowaniu „zapamiętania” dokładnie, po której stronie zera znajduje się idealna wartość, dodatnia lub ujemna. Jest to krytyczne w niektórych złożonych obliczeniach (w sensie „a + bi”) - złożone-> złożone funkcje są często „wielowartościowe”, więc dla prawidłowego obliczenia niezwykle ważne jest zwrócenie uwagi na lokalizację „odcięć gałęzi”. Podpisane zera oznaczają w pewnym sensie lokalizacje cięć gałęzi - obliczenia wykonane po stronie dodatniej będą różnić się od obliczeń po stronie ujemnej.
źródło
Większość formatów zmiennoprzecinkowych wykorzystuje fakt, że w systemie binarnym każda niezerowa wartość z nie-minimalnym wykładnikiem będzie miała „1” jako najbardziej znaczący bit mantysy. Zatem w systemie z 23-bitowym polem dla mantysy, mantysy liczb dodatnich nie mieszczą się w zakresie od 0 do 8 388 607, ale zamiast od 8 388,608 do 16 777 215. Mantysy liczb, które mogą być dodatnie, mogą wynosić od -16,777,215 do -8 388 608 i od +8 388,608 do +16,777,215. Podczas gdy dopełnianie dwóch jest najlepszym formatem numerycznym, gdy konieczne jest, aby obliczenia „płynnie” przekraczały zero, nieciągłe zakresy wartości mantysy oznaczają, że obliczenia nie byłyby w stanie działać płynnie w obrębie zera niezależnie od tego, czy używają uzupełnienia dwóch czy czegoś innego .
źródło