Como ya sabrás, Spotlight puede hacer matemáticas simples. Por ejemplo, la escritura cos(pi)
resultará -1
, como es de esperar. Acabo de escribir cos(pi/2)
, que debería ser 0 pero me dio -5e-12
.
Sí, probablemente se deba a un error de redondeo, pero vamos cos(pi/2)
:! En mi opinión, eso claramente parece un error. ¿Qué piensas?
pi
en sí estaría codificado (a medida que obtienes -1cos(pi)
) pero tan pronto como lo manipulas obtienes un número de coma flotante, que tiene una precisión limitada. OSX no codificapi/2
,pi/4
etc., en realidad hace la operación.0.1
exactamente. precisamente, pero no es útil para números irracionales como pi que no pueden representarse exactamente en binario o decimal.irb(main):009:0> Math.cos(Math::PI/2) => 6.123233995736766e-17
Respuestas:
Se debe a la falta de precisión de pi y a la falta general de precisión en el sistema incorporado.
Sobre la precisión general del sistema:
En Python obtenemos lo siguiente:
Como podemos ver, hay un problema con la precisión ya que ni siquiera coincide con la representación flotante.
fuente
No almacenan π con una precisión de punto flotante inusual. Están utilizando un valor incorrecto para π con doble precisión. Para aproximar 3.1415926536 en binario, se requieren al menos 38 bits:
Observe que 2 ^ -36 es aproximadamente 1.5e-11, que coincide con el 99 final. El punto flotante de doble precisión tiene un significado de 52 bits. Para evaluar
cos(pi/2)
como -5e-12, la única otra opción posible sería un tipo de 48 bits, lo que sería muy extraño.Cerca de 0 y π, donde la derivada es casi cero, cos (θ) no se puede calcular con mucha precisión:
cos(3.1415926536) ≈ -0.999999999999999999999947911
Eso difiere de -1 en aproximadamente 5.2e-23, que es más pequeño que ε para
double
, por lo quecos(3.1415926536)
se calcula exactamente como -1 ... lo cual es incorrecto.Cerca de ± π / 2, la derivada [ -sin (θ) ] es casi ± 1, por lo que el error en la entrada se convierte en la salida.
Tengo una calculadora TI que muestra un dígito menos y calcula
cos(π/2)
como -5.2e-12. Sin embargo, es muy diferente electrónicamente y fue diseñado para dar un valor exacto paracos(90°)
.Supongo que en Spotlight,
cos(pi/2)
se calcula recuperando un valor para π, convirtiéndolo en una cadena decimal , almacenándolo como el valor binario (exacto, racional) 11.00100100001111110110101010001000100100001101101111 (o 10000), dividiendo por 2, y luego esencialmente restando eso de El verdadero valor de π / 2. Debe averiguar sicos(pi/2 + cos(pi/2))
está más cerca de cero (podría ser -2.2e-35).La multiplicación por una potencia de dos debería afectar solo al exponente, no al significado. Es posible determinar cómo se aplica el redondeo mediante la reducción a la mitad o la duplicación.
fuente
Es un error que se puede reproducir en 10.9.2, y un error de redondeo de coma flotante como este es bastante típico.
Es el valor de pi que se maneja sin suficiente precisión si tuviera que adivinar.
Me dirijo a https://developer.apple.com/bug-reporting/ si quieres ver el aparato de reparación de errores de Apple en acción.
fuente
cos(2*acos(0)*0.5)
devuelve un número de orden10^-10
. Entonces no es porque la constante π no sea lo suficientemente precisa. No puedo explicar este resultado: es demasiado impreciso para doble precisión y demasiado preciso para precisión simple.De las otras respuestas y comentarios, queda claro lo siguiente:
El hecho de que obtenga un resultado distinto de cero NO es un error, incluso con una implementación perfecta del software, se encontrará con los límites de los cálculos de coma flotante. Sin embargo, el error en el orden de 10 ^ -12 es realmente grande.
Esto NO tiene la culpa de la inexactitud de los números de coma flotante. El resultado que obtienes es solo esto:
Eso se puede validar utilizando cualquier paquete de software alternativo. Si tuviera que evaluar
cos(pi/2)
en uno de esos paquetes, definitivamente obtendría un resultado mucho más cercano a cero que 10 ^ -12.Para concluir, veo dos posibles limitaciones, una de las cuales debe aplicarse:
Quizás alguien con acceso al software pueda validar cuál de estos aplica.
Actualización Como se mencionó en el comentario, el problema parece ser la precisión de la constante
pi
.fuente
Teniendo en cuenta que
-5e-12
es un número muy pequeño, este es un error de redondeo.Creo que es la consecuencia de que Spotlight muestre más decimales de los que se usan en la definición de la serie
pi
constante o infinita utilizada para calcular las funciones trigonométricas.fuente