Eles não estão armazenando π com precisão incomum de ponto flutuante. Eles estão usando um valor incorreto para π com precisão dupla. Para aproximar 3,1415926536 em binário, são necessários pelo menos 38 bits:
3.14159265359922… > 11.001001000011111101101010100010001001
Observe que 2 ^ -36 é aproximadamente 1,5e-11, o que coincide com o 99 final. O ponto flutuante de precisão dupla tem um significando de 52 bits. Para avaliar cos(pi/2)
como -5e-12, a única outra opção possível seria um tipo de 48 bits, o que seria muito estranho.
Perto de 0 e π, onde a derivada é quase zero, cos (θ) não pode ser calculado com muita precisão:
cos(3.1415926536) ≈ -0.999999999999999999999947911
Isso difere de -1 em cerca de 5,2e-23, que é menor que ε para double
, então cos(3.1415926536)
é calculado exatamente como -1 ... o que está incorreto.
Perto de ± π / 2, a derivada [ -sin (θ) ] é quase ± 1, portanto o erro na entrada se torna a saída.
cos(1.57079632679961) ≈ -4.71338076867830836e-12
cos(1.57079632679962) ≈ -4.72338076867830836e-12
cos(1.57079632680000) ≈ -5.10338076867830836e-12
Por acaso, tenho uma calculadora de TI que exibe um dígito a menos e calcula cos(π/2)
como -5.2e-12. No entanto, é muito diferente eletronicamente e foi projetado para fornecer um valor exato para cos(90°)
.
Suponho que, no Spotlight, cos(pi/2)
esteja sendo calculado recuperando um valor para π, convertendo para uma sequência decimal , armazenando-o como o valor binário (exato, racional) 11.001001000011111101101010100010001001000010011101111 (ou 10000), dividindo por 2 e depois subtraindo-o de o valor verdadeiro de π / 2. Você deve descobrir se cos(pi/2 + cos(pi/2))
está mais perto de zero (pode ser -2,2e-35).
A multiplicação por uma potência de dois deve afetar apenas o expoente, não o significando. Pode ser possível determinar como o arredondamento é aplicado pela metade ou duplicação repetidas.