Non memorizzano π con insolita precisione in virgola mobile. Stanno usando un valore errato per π con doppia precisione. Per approssimare 3.1415926536 in binario, sono richiesti almeno 38 bit:
3.14159265359922… > 11.001001000011111101101010100010001001
Si noti che 2 ^ -36 è circa 1,5e-11, che coincide con il 99 finale. Il virgola mobile a precisione doppia ha un significato di 52 bit. Per valutare cos(pi/2)
come -5e-12, l'unica altra scelta possibile sarebbe un tipo a 48 bit, il che sarebbe molto strano.
Vicino a 0 e π, dove la derivata è quasi zero, cos (θ) non può essere calcolato in modo molto preciso:
cos(3.1415926536) ≈ -0.999999999999999999999947911
Ciò differisce da -1 di circa 5,2e-23, che è più piccolo di ε per double
, quindi cos(3.1415926536)
viene calcolato esattamente come -1 ... che non è corretto.
Vicino a ± π / 2, la derivata [ -sin (θ) ] è quasi ± 1, quindi l'errore all'ingresso diventa l'uscita.
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 elettronicamente ed è stato progettato per dare un valore esatto per cos(90°)
.
Immagino che in Spotlight cos(pi/2)
venga calcolato recuperando un valore per π, convertendolo in una stringa decimale , memorizzandolo come valore binario (esatto, razionale) 11.00100100001111110110101010001000100100001101101111 (o 10000), dividendolo per 2, e quindi sottraendo essenzialmente da il vero valore di π / 2. Dovresti scoprire se cos(pi/2 + cos(pi/2))
è più vicino a zero (potrebbe essere -2.2e-35).
La moltiplicazione per un potere di due dovrebbe influenzare solo l'esponente, non il significato. Potrebbe essere possibile determinare come viene applicato l'arrotondamento ripetendo il dimezzamento o il raddoppio.