Non memorizzano π con precisione a virgola mobile insolita. Stanno usando un valore errato per π con doppia precisione. Per approssimare 3.1415926536 in binario, sono necessari almeno 38 bit:
3.14159265359922… > 11.001001000011111101101010100010001001
Si noti che 2 ^ -36 è circa 1.5e-11, che coincide con il 99 finale. floating a doppia precisione- il punto ha un significato e 52 bit. Per valutare cos(pi/2)
come -5e-12, l'unica altra scelta possibile sarebbe un tipo a 48 bit, che sarebbe molto strano.
Vicino a 0 e π, dove la derivata è quasi zero, cos (θ) non può essere calcolato in modo accurato:
cos(3.1415926536) ≈ -0.999999999999999999999947911
Questo differisce da -1 per circa 5,2e-23, che è minore di ε per double
, quindi cos(3.1415926536)
è calcolato come esattamente -1 ... che non è corretto.
Vicino a ± π / 2, la derivata [ -sin (θ) ] è quasi ± 1, quindi l'errore sull'ingresso diventa l'output.
cos(1.57079632679961) ≈ -4.71338076867830836e-12
cos(1.57079632679962) ≈ -4.72338076867830836e-12
cos(1.57079632680000) ≈ -5.10338076867830836e-12
Mi capita di avere un calcolatore TI che visualizza una cifra in meno e calcola cos(π/2)
come -5.2e-12. Tuttavia, è molto diverso dal punto di vista elettronico ed è stato progettato per fornire un valore esatto per cos(90°)
.
Direi che in Spotlight, cos(pi/2)
viene calcolato recuperando un valore per π, convertendo in una stringa decimale , memorizzandolo come valore binario (esatto, razionale) 11.00100100001111110110101010001000100100001101101111 (o 10000), dividendo per 2, e quindi essenzialmente sottraendo quello dal valore reale di π / 2. Dovresti scoprire se cos(pi/2 + cos(pi/2))
è più vicino a zero (potrebbe essere -2.2e-35).
La moltiplicazione per potenza di due dovrebbe influenzare solo l'esponente, non il significato e. Potrebbe essere possibile determinare come viene applicato l'arrotondamento mediante dimezzamento o raddoppio ripetuto.