8 votos

¿Por qué el Foco de dar un valor incorrecto para el `cos(pi/2)`?

Como usted puede saber, el Proyector puede hacer matemáticas simples. Por ejemplo, escribir cos(pi) resultará en -1, como se podría esperar. Me acaba de escribir en cos(pi/2), que debe ser de 0 pero me dio -5e-12.

Sí es probablemente debido a un error de redondeo, pero vamos: cos(pi/2)! En mi opinión, que claramente se ve como error. ¿Qué te parece?

13voto

Satanicpuppy Puntos 4902

Es debido a la falta de precisión de pi y debido a la total falta de precisión en el sistema integrado.

pi = 3.1415926536

pi/2 = 1.5707963268 

cos(1.5707963268) = -5.103412e-12

FYI =  5.103412e-12 = 0.000000000005103412 ~ 0 


Sobre el sistema general de precisión :

3.141592653589793238462643383 = 3.1415926536 

En Python se obtiene la siguiente :

>>> float("3.141592653589793238462643383")
3.141592653589793

Como podemos ver hay un problema con la precisión, ya que ni siquiera coincide con el flotador de la representación.

5voto

manu08 Puntos 1572

Ellos no son el almacenamiento de π con inusual de punto flotante de precisión. Están utilizando un valor incorrecto para el π con doble precisión. Para aproximado 3.1415926536 en binario, por lo menos 38 bits son necesarios:

3.14159265359922… > 11.001001000011111101101010100010001001

Observe que 2^-36 es de alrededor de 1.5 e-11, que coincide con la final del 99. De doble precisión de punto flotante tiene un 52 bits de mantisa. 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 de forma muy precisa:

cos(3.1415926536) ≈ -0.999999999999999999999947911

Que se diferencia de -1 por el 5.2 e-23, que es menor que ε para double, lo cos(3.1415926536) se calcula como exactamente -1... lo cual es incorrecto.

Cerca de ±π/2, la derivada [-sen(θ)] es casi ±1, por lo que el error en la entrada se convierte en la salida.

cos(1.57079632679961) ≈ -4.71338076867830836e-12
cos(1.57079632679962) ≈ -4.72338076867830836e-12
cos(1.57079632680000) ≈ -5.10338076867830836e-12

Sucede que tengo un TI calculadora que muestra uno menos dígitos y calcula cos(π/2) como -5.2 e-12. Sin embargo, es muy diferente electrónicamente y fue diseñado para dar un valor exacto para cos(90°).

Me imagino que en el centro de atención, cos(pi/2) se calcula mediante la recuperación de un valor de π, la conversión a decimal cadena, el almacenamiento que como el (exacta, racional) valor binario 11.00100100001111110110101010001000100100001101101111 (o 10000), dividiendo por 2, y, a continuación, esencialmente restando de que el verdadero valor de π/2. Usted debe averiguar si cos(pi/2 + cos(pi/2)) está más cerca de cero (puede ser -2.2 e-35).

La multiplicación por una potencia de dos debería afectar sólo el exponente, no la mantisa. Podría ser posible determinar el modo de redondeo se aplica por las reiteradas reducir a la mitad o doblar.

4voto

Oskar Puntos 1242

Es un error que reproducible en 10.9.2 - y de punto flotante, error de redondeo uno como que es muy típico.

Es el valor de pi que está siendo manejado sin la suficiente precisión si tuviera que adivinar.

  • cos(999999*pi) no tiene un error
  • cos((999999+1)*pi) tiene un error probable de redondeo

Me gustaría ir a https://developer.apple.com/bug-reporting/ si usted desea ver los de Apple corrección de errores aparato en acción.

4voto

Dennis Jaheruddin Puntos 141

De las otras respuestas y comentarios a la siguiente se vuelve claro:

El hecho de que usted obtenga un resultado distinto de cero NO es un error, incluso con una perfecta aplicación del software que se puede ejecutar en los límites de los cálculos de punto flotante. Sin embargo, el error en la orden de 10^-12 es muy grande.

Este NO es echarle la culpa a la inexactitud de los números de punto flotante. El resultado que se obtiene es simplemente esta:

cos(1.5707963268)

Que puede ser validado mediante cualquier paquete de software alternativo. Si se va a evaluar cos(pi/2) en uno de esos paquetes que sin duda tendrá un resultado mucho más cerca de cero que 10^-12.

Para concluir, veo dos posibles limitaciones, uno de los cuales debe aplicar:

  1. Pi no se almacena con la suficiente precisión, o al menos pi/2 resultados en la insuficiente precisión
  2. Cos simplemente toma insuficiente precisión como entrada

Tal vez alguien con acceso al software puede validar que de estos se aplica.

Actualización Como se mencionó en el comentario, el problema parece ser la exactitud de la constante pi.

2voto

Mike Puntos 1018

Teniendo en cuenta que -5e-12 es un verryyyy pequeño número, este es un error de redondeo.

Creo que es la consecuencia de spotlight muestra más decimales que los que se utilizan en la definición de la pi constante o la serie infinita utiliza para calcular funciones trigonométricas.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X