Nie przechowują π z niezwykłą precyzją zmiennoprzecinkową. Używają niepoprawnej wartości π z podwójną precyzją. Aby w przybliżeniu 3.1415926536 binarnie, wymagane jest co najmniej 38 bitów:
3.14159265359922… > 11.001001000011111101101010100010001001
Zauważ, że 2 ^ -36 wynosi około 1,5e-11, co pokrywa się z końcową liczbą 99. Zmienna zmiennoprzecinkowa podwójnej precyzji ma znaczenie 52-bitowe. Aby ocenić cos(pi/2)
jako -5e-12, jedynym innym możliwym wyborem byłby typ 48-bitowy, co byłoby bardzo dziwne.
Blisko 0 i π, gdzie pochodna wynosi prawie zero, cos (θ) nie może być obliczone bardzo dokładnie:
cos(3.1415926536) ≈ -0.999999999999999999999947911
Różni się to od -1 o około 5,2e-23, co jest mniejsze niż ε dla double
, więc cos(3.1415926536)
jest obliczane jako dokładnie -1 ... co jest niepoprawne.
W pobliżu ± π / 2 pochodna [ -sin (θ) ] wynosi prawie ± 1, więc błąd na wejściu staje się wyjściem.
cos(1.57079632679961) ≈ -4.71338076867830836e-12
cos(1.57079632679962) ≈ -4.72338076867830836e-12
cos(1.57079632680000) ≈ -5.10338076867830836e-12
cos(π/2)
Zdarza mi się mieć kalkulator TI, który wyświetla jedną cyfrę mniej i oblicza jako -5,2e-12. Jest jednak zupełnie inny pod względem elektronicznym i został zaprojektowany w celu podania dokładnej wartości cos(90°)
.
Domyślam się, że w Spotlight cos(pi/2)
jest obliczany przez pobranie wartości π, konwersję do ciągu dziesiętnego , przechowywanie go jako (dokładnej, wymiernej) wartości binarnej 11.00100100001111110110101010001000100100001101101111 (lub 10000), dzielenie przez 2, a następnie odejmowanie tego od prawdziwa wartość od p / 2. Powinieneś dowiedzieć się, czy cos(pi/2 + cos(pi/2))
jest bliżej zera (może to być -2,2e-35).
Mnożenie przez potęgę dwóch powinno wpływać tylko na wykładnik, a nie na znaczenie. Możliwe jest określenie, w jaki sposób stosuje się zaokrąglanie, poprzez powtarzanie o połowę lub podwojenie.