77 votos

¿Por qué se la dan de calculadora de google broncea 90 grados = 1.6331779e + 16?

He escrito tan 90 grados en google y dio 1.6331779e + 16. ¿Cómo llegó a esta respuesta? ¿Límites? ¿Algo de magia?

199voto

MrTuttle Puntos 1116

El más cercano IEEE-754 double valor de \pi/2$ $ es $1.5707963267948965579989817342720925807952880859375$. El coseno, en hardware estándar x86_64 evalúa a $6.123233995736766 \times 10 ^ {-17$}. El recíproco del que es $1.633123935319537 \times 10 ^ {16} $.

61voto

Darien Puntos 581

Como Daniel Fischer, dijo, es debido a errores de redondeo en punto flotante IEEE de matemáticas, que está muy extendida en las computadoras y los lenguajes de programación. Desde él se explica por qué es precisamente ese número, me voy a tomar una puñalada en la respuesta más general.

El ejemplo

((1.0 - 0.9) - 0.1) = -2.7755575615628914*10^-17

Obviamente, esto es matemáticamente incorrecto, pero se produce porque el equipo (A) no tiene precisión infinita y (B) no guardar los números en base 10. La clave que 0.9 y 0.1 no se puede no se puede representar exactamente, justo como "un tercio" no se puede representar exactamente en decimal.

El problema no mostrar inmediatamente (print(0.9) sale bien) porque el equipo es lo suficientemente inteligente como para redondear las pequeñas desviaciones cuando se convierte decimales, pero la "relación a distancia" entre 0 y -2.8*10^-17 es un poco demasiado para ocultar.

Bits y bytes

Suponiendo que estamos buscando a un 32-bit float, -0.9 se almacena como:

Section         Bits                       Translation
+/1 sign bit    1                          Is negative
exponent:       01111110                   -1 (126 above a -127 offset)
mantissa        11001100110011001100110    0.79999995231628426710886

Observe cómo la mantisa contiene una repetición 1100? patrón? Es casi exactamente como el almacenamiento de 1/3 como 0.3333333333 en decimal. En ambos casos no se puede almacenar de forma precisa sin quedarse sin espacio.

De todos modos, cuando las partes de que la representación juntos, se obtiene:

(-1) * 2^(-1) * (1+ 0.79999995231628426710886)

O, aproximadamente, -0.8999999761581421. Esta desconexión entre la representación decimal (lo cual es bueno) y la representación binaria (que es fea... er, incompleta) es la primera ficha de dominó en un potencial cascada de sutil error de redondeo.

16voto

Hagen von Eitzen Puntos 171160

Al parecer es la consequnce de algún error de redondeo. El número sería el resultado correcto $\tan(89.9999999999999964917593431035141398\ldots^\circ)$.

6voto

Stephen Denne Puntos 218

Porque parece que Google Calculadora funciona internamente

El uso de radianes significa que la GC es el uso de un ángulo de $\frac{\pi}{2}$ radianes. El más cercano representable double el valor es de $1.5707963267948965579989817342720925807952880859375$. He de indicar que este valor aproximado de $\frac{\pi}{2} - \epsilon$, donde $\epsilon \aprox 6.123233995736766 \times 10^{-17} $ (calcula mediante el uso de un mayor valor de precisión de $\pi$).

Recordemos que $\tan (\frac{\pi}{2} - \epsilon) = \cuna \epsilon = \frac{1}{\tan \epsilon} $. En mi máquina, esta se evalúa a $1.633123935319537 \times 10^{16}$. (La aproximación de ángulo pequeño de $\cuna \epsilon \approx \frac{1}{\epsilon}$ pasa a dar la misma respuesta.) Esto es parecido a lo que Google Calculadora devuelve, pero difiere por 33 ppm.

-7voto

Satya Prakash Puntos 766

Le pregunté a Google para tan(pi/2) y devolvió un error. Google al parecer trabaja con radianes en vez de grados. Además, ahora piensa tan(90) es igual a-1.99520041221.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia 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