En operaciones y números de coma flotante de precisión simple, ¿cuál es el mínimo positivo [matemática] X [/ matemática] donde [matemática] \ displaystyle \ frac {X} {X + 1} = 1 [/ matemática]?

Un número de coma flotante de precisión simple tiene 24 bits de significado (y el primer bit siempre es 1, por lo que solo se almacenan 23 bits).

[math] 2 ^ {24} [/ math] se representa en binario como 1 seguido de 24 ceros, por lo que su representación en coma flotante es

[matemáticas] 1.00000000000000000000000 \ veces 2 ^ {24} [/ matemáticas]

Agregar uno resultaría en

[matemáticas] 1.000000000000000000000001 \ veces 2 ^ {24} [/ matemáticas]

pero eso requiere 24 bits, y solo tenemos 23, por lo que se redondea hacia abajo. Así, en coma flotante de 32 bits [matemática] 2 ^ {24} + 1 = 2 ^ {24} [/ matemática].

Puede probar esto con un programa corto de C ++:

int main (int argc, char * argv []) {
flotador f = (1 << 24);
flotador f1 = f + 1;
si (f == f1) {
std :: cout << "¡Igual!" << std :: endl;
}
devuelve 0;
}

Ahora, ¿es [matemáticas] X = 2 ^ {24} [/ matemáticas] el ejemplo más pequeño posible? No podemos volvernos más pequeños cambiando el exponente, porque entonces el ‘1’ volverá a ser significativo. La otra forma de obtener la fracción igual a uno es si la proporción se redondea a 1, pero esto no ocurre (puede escribir nuevamente el código para verificar).

Precisión simple: 16777216.000000

Doble precisión: 9007199254740992.000000

Aquí hay un código C ++ rápido para calcular la respuesta anterior:

#include “stdio.h”

plantilla
T Calculate_minx ()
{
Tx = T (1);
while (x / (x + T (1))! = T (1)) x * = T (2);
T hi = x;
T lo = x / T (2);
mientras que (1) {
x = (hi + lo) / T (2);
if (x == hi || x == lo) break;
if (x / (x + T (1)) == T (1)) hi = x;
de lo contrario lo = x;
}
regrese hola;
}

int main ()
{
printf (“Precisión simple:% f \ n”, Calculate_minx ());
printf (“Precisión doble:% lf \ n”, Calculate_minx ());
devuelve 0;
}

Editar: como señaló Mark Gritter, la respuesta de precisión única es precisamente 2 ^ 24. La respuesta de doble precisión es 2 ^ 53 (por la misma razón, pero con la mantisa más grande).