Вони не зберігають π з незвичною точністю з плаваючою комою. Вони використовують неправильне значення для π з подвійною точністю. Для наближення до 3.1415926536 у двійковій формі потрібно щонайменше 38 біт:
3.14159265359922… > 11.001001000011111101101010100010001001
Зауважте, що 2 ^ -36 - це приблизно 1,5e-11, що збігається з кінцевим 99. Плаваюча точка з подвійною точністю має 52-бітове значення. Оцінити cos(pi/2)
як -5e-12, єдиним іншим можливим вибором буде 48-бітний тип, що було б дуже дивно.
Близько 0 і π, де похідна майже дорівнює нулю, cos (θ) не може бути обчислена дуже точно:
cos(3.1415926536) ≈ -0.999999999999999999999947911
Це відрізняється від -1 приблизно на 5.2e-23, що менше ε для double
, тому cos(3.1415926536)
обчислюється як саме -1 ... що невірно.
Близько ± π / 2, похідна [ -sin (θ) ] майже ± 1, тому помилка на вході стає вихідною.
cos(1.57079632679961) ≈ -4.71338076867830836e-12
cos(1.57079632679962) ≈ -4.72338076867830836e-12
cos(1.57079632680000) ≈ -5.10338076867830836e-12
У мене cos(π/2)
, здається, є калькулятор TI, який відображає одну меншу цифру і обчислює як -5,2e-12. Однак він дуже різний в електронному вигляді і був розроблений, щоб дати точне значення для cos(90°)
.
Я б припустив, що в Spotlight cos(pi/2)
обчислюється шляхом отримання значення для π, перетворення в десятковий рядок , зберігаючи його як (точне, раціональне) двійкове значення 11.00100100001111110110101010001000100100101101111 (або 10000), діливши на 2, а по суті віднімаючи це від справжнє значення П / 2. Ви повинні з’ясувати, чи cos(pi/2 + cos(pi/2))
ближче до нуля (це може бути -2,2е-35).
Множення на силу двох повинно впливати лише на показник, а не на значенняі. Можна визначити, як застосовується округлення шляхом повторного скорочення вдвічі або подвоєння.