Dlaczego 1/3 jako podwójne jest 0,33333333333333331
Najbliższa droga do reprezentowania 1/3 binarny jest tak: 0,0101010101 ... To samo jak seria 1/4 + (1/4)^2 + (1/4)^3 + (1/4)^4 ...
Oczywiście jest to ograniczone liczbą bitów, które można przechowywać w podwójnym. Podwójny to 64 bity, ale jednym z nich jest bit znaku, a kolejne 11 reprezentuje wykładnik (myślę o nim jak o notacji naukowej, ale w postaci binarnej). Resztę, która nazywa się mantysa lub significand, wynosi 52 bity. Załóżmy 1, aby rozpocząć, a następnie użyć dwóch bitów dla każdej kolejnej potęgi 1/4. Oznacza to, że można przechowywać: 1/4 + 1/4^2 + ... + 1/4^27 który jest 0,33333333333333331
Dlaczego mnożąc przez 3 rundy to 1
So 1/3 reprezentowane w trybie binarnym i ograniczone przez rozmiar podwójnego to: 0.010101010101010101010101010101010101010101010101010101 Nie mówię, że tak to jest przechowywane. Tak jak mówiłem, przechowujesz bity zaczynające się po 1, a używasz oddzielnych bitów dla wykładnika i znaku. Ale myślę, że warto zastanowić się, jak byś napisał to w bazie 2.
Trzymajmy się tej binarnej reprezentacji "matematyka" i zignorujmy granice wielkości podwójnej. Nie musisz tego robić w ten sposób, ale uważam, że jest to wygodne. Jeśli chcemy przyjąć to przybliżenie za 1/3 i pomnożyć przez 3, to jest to to samo co zmiana bitu do pomnożenia przez 2, a następnie dodanie tego, co zaczęliśmy. Daje nam to 1/3 * 3 = 0.111111111111111111111111111111111111111111111111111111
Ale czy może to podwójny sklep? Nie, pamiętaj, że możesz mieć tylko 52 bity mantysy po pierwszym 1, a liczba ta wynosi 54. Więc wiemy, że zostanie ona zaokrąglona w tym przypadku zaokrągla się w górę do dokładnie 1.
Dlaczego dla przecinku dostać 0,9999999999999999999999999999
Z przecinku, można uzyskać 96 bitów do reprezentowania integer z dodatkowymi bitami reprezentujący wykładnik do 28 potęg 10. Więc chociaż ostatecznie wszystko jest przechowywane jako binarne, tutaj pracujemy z potęgami 10, więc warto pomyśleć o liczbie w bazie 10.96 bitów pozwala nam wyrazić aż do 79 226 162 514 264 337 593 533 935 335, ale do 1/3 idziemy z wszystkimi 3, aż do 28 z nich możemy przesunąć na prawo od kropki dziesiętnej: 0.3333333333333333333333333333.
Pomnożenie tego przybliżenia dla 1/3 przez 3 daje nam liczbę, którą możemy dokładnie przedstawić. To tylko 28 9, wszystkie przesunięte na prawo od kropki dziesiętnej: 0.9999999999999999999999999999. Tak więc w przeciwieństwie do podwójnych nie ma w tym momencie drugiej rundy zaokrąglania.
http : //docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html –
Niestety nie mam czasu na przeczytanie całego artykułu. Czy możesz wskazać mi odpowiednią sekcję, lub jeśli znasz odpowiedź, po prostu wpisz ją tutaj? –