Ils ne sont pas stockés avec une précision inhabituelle en virgule flottante. Ils utilisent une valeur incorrecte pour la double précision. Pour approximativement 3.1415926536 en binaire, au moins 38 bits sont nécessaires :
3.14159265359922… > 11.001001000011111101101010100010001001
Remarquez que 2^-36 est environ 1.5e-11, ce qui coïncide avec le 99 qui suit. Virgule flottante à double précision a un significande de 52 bits. Pour évaluer cos(pi/2)
comme -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
La différence avec -1 est d'environ 5,2e-23, ce qui est plus faible que pour double
donc cos(3.1415926536)
est calculé comme suit exactement -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 en moins et calcule cos(/2)
comme -5.2e-12. Cependant, il est très différent électroniquement et a été conçu pour donner une valeur exacte de cos(90°)
.
Je suppose que dans Spotlight, cos(pi/2)
est calculé en récupérant une valeur pour , conversion en chaîne décimale en le stockant sous la forme de la valeur binaire (exacte, rationnelle) 11.001001000011111101101010001000100100001101101111 (ou 10000), en le divisant par 2, puis en le soustrayant essentiellement de la valeur valeur réelle de /2. Vous devez déterminer si cos(pi/2 + cos(pi/2))
est plus proche de zéro (il pourrait être de -2,2e-35).
La multiplication par une puissance de deux ne devrait affecter que l'exposant, pas le significande. Il pourrait être possible de déterminer comment l'arrondi est appliqué en divisant par deux ou par deux de manière répétée.