Pregunta

Puede un doble (de un número dado de bytes, con un equilibrio mantisa / exponente razonable) siempre totalmente precisamente mantener el rango de un entero sin signo de media ese número de bytes?

por ejemplo. puede un niño de ocho bytes dobles totalmente precisa mantener el rango de números de un entero sin signo de cuatro bytes?

Lo que esto se reduce a si es un flotador de dos bytes puede contener el rango de un entero sin signo de un byte.

A un byte sin signo int, por supuesto, ser 0 -.> 255

¿Fue útil?

Solución

Un IEEE754 64 bits doble puede representar cualquier número entero de 32 bits, simplemente porque tiene 53 y pico (a) bits disponibles para la precisión y el número entero de 32 bits sólo necesita, así, 32 : -)

Sería plausible para un (doble precisión no IEEE754) de 64 bits número de punto flotante tiene menos de 32 bits de precisión. Eso permitiría verdaderamente un gran número (debido al exponente), pero a costa de precisión.

La conclusión es que, siempre hay más bits de precisión en la mantisa del número en coma flotante que los que hay en el número entero (y suficientes bits en el exponente a escala), entonces se puede representar sin pérdida de precisión.


(a) Técnicamente, el bit 53a de precisión es una 1 implícita en el inicio de la secuencia de modo que la cantidad de "variabilidad" puede ser sólo 52 bits. Ya se trate de 52 o 53, que es todavía lo suficientemente bits para representar cada número entero de 32 bits.

Otros consejos

Sí. Un flotador (o doble) está garantizada para representar exactamente cualquier número entero que no necesita ser truncado. Para un doble, no es de 53 bits de precisión, de modo que es más que suficiente para exactamente representar cualquier número entero de 32 bits, y una pequeña (estadísticamente hablando) proporción de los 64 bits también.

Exactamente lo que el rango es que se puede representar con exactitud depende de muchos factores en su aplicación, pero se puede límite inferior es diciendo que, si el campo exponente se establece en 0, se puede representar exactamente números enteros hasta la anchura de su campo de mantisa (suponiendo un bit de signo). Para IEEE 754 de doble precisión, esto significa que puede representar números 52 bits exactamente. En general, su mantisa será más de la mitad de la anchura de la estructura global.

Para más detalles sobre cómo funciona un doble, es posible que desee ver en esta entrada del blog: Anatomía de un número de coma flotante .

Yo no usaría las palabras "totalmente precisamente" cuando se habla de números de punto flotante. Pero sí, un double puede representar un entero de 32 bits.

No sé qué otras combinaciones de flotadores y enteros que esto también es cierto para.

En la práctica, usted no quiere preocuparse por el uso de punto flotante por encima de lo que admite su máquina, por lo que sólo cambian a la aritmética racional con bignums. De esa manera, tiene la garantía de precisión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top