Ils ne stockent pas π avec une précision inhabituelle en virgule flottante. Ils utilisent une valeur incorrecte pour π avec une double précision. Pour approximer 3,1415926536 en binaire, au moins 38 bits sont requis:
3.14159265359922… > 11.001001000011111101101010100010001001
Notez que 2 ^ -36 est d'environ 1,5e-11, ce qui coïncide avec le 99 de fin. La virgule flottante double précision a une signification de 52 bits. Pour évaluer cos(pi/2)
-5e-12, le seul autre choix possible serait un type 48 bits, ce qui serait très étrange.
Près de 0 et π, où la dérivée est presque nulle, cos (θ) ne peut pas être calculé très précisément:
cos(3.1415926536) ≈ -0.999999999999999999999947911
Cela diffère de -1 d'environ 5,2e-23, ce qui est inférieur à ε pour double
, cos(3.1415926536)
est donc calculé exactement comme -1 ... ce qui est incorrect.
Près de ± π / 2, la dérivée [ -sin (θ) ] est proche de ± 1, donc l'erreur à l'entrée devient la sortie.
cos(1.57079632679961) ≈ -4.71338076867830836e-12
cos(1.57079632679962) ≈ -4.72338076867830836e-12
cos(1.57079632680000) ≈ -5.10338076867830836e-12
Il se trouve que j'ai une calculatrice TI qui affiche un chiffre de moins et calcule cos(π/2)
-5,2e-12. Cependant, il est très différent électroniquement et a été conçu pour donner une valeur exacte pour cos(90°)
.
Je suppose que dans Spotlight, cos(pi/2)
est calculé en récupérant une valeur pour π, en la convertissant en une chaîne décimale , en la stockant en tant que valeur binaire (exacte, rationnelle) 11,00100100001111110110101010001000100100001101101111 (ou 10000), en divisant par 2, puis en soustrayant essentiellement celle de la vraie valeur de π / 2. Vous devriez savoir s'il cos(pi/2 + cos(pi/2))
est plus proche de zéro (il pourrait être -2,2e-35).
La multiplication par une puissance de deux ne devrait affecter que l'exposant, pas la signification. Il pourrait être possible de déterminer comment l'arrondi est appliqué en réduisant ou en doublant de façon répétée.