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.