Jaki jest dokładny zakres (ciągłych) liczb całkowitych, które można wyrazić jako podwójny (czy też unoszący się)? Powód, dla którego pytam, jest taki, ponieważ jestem ciekawy questions such as this one, gdy nastąpi utrata dokładności.Zakres liczb całkowitych, które można dokładnie wyrazić jako zmiennoprzecinkowe/dwójkowe
To
- Jaka jest najmniejsza dodatnia
m
takie, żem+1
nie można precyzyjnie wyrażone jako podwójne (odp. Float)? - Jaka jest największa ujemna liczba całkowita
-n
taka, że -n-1
nie może być precyzyjnie wyrażona jako podwójna (odpowiednio zmienna)? (Może być taki sam jak powyżej).
Oznacza to, że każda liczba całkowita pomiędzy -n
i m
ma dokładnie takie reprezentacji zmiennoprzecinkowej. Zasadniczo szukam zakresu [-n, m]
dla jednostek pływających i podwójnych.
Ograniczmy zakres do 32-bitowych i 64-bitowych reprezentacji zmiennoprzecinkowych w postaci . Wiem, że float ma 24 bity precyzji, a double ma 53 bity (oba z ukrytym bitem wiodącym), ale ze względu na zawiłości reprezentacji zmiennoprzecinkowej szukam autorytatywnej odpowiedzi na to. Proszę nie machać rękami!
(odpowiedź Ideałem byłoby udowodnić, że wszystkie liczby całkowite od 0
do m
są podlegać ekspresji, a m+1
nie jest.)
Oznaczono tagami z językami, ponieważ nie było ruchu dla innych tagów, których próbowałem. Dziękuję za odpowiedź! –
Kyurem jest martwy w swojej analizie. Ale jeśli chcesz empirycznego rozwiązania, po prostu przetestuj z pętlą for: 'float f = 0; for (;; ++ f) {if (f == (f + 1)) {cout << f; przerwa; }} '. Podobne do podwójnych i negatywnych. –