9 votos

por qué es $2.2250738585072014\text{e}{-308}$ ¿no es un número?

En programación el valor mínimo de un flotador es: $$2.2250738585072014\text{e}{-308}$$

pero cuando escribo esto en una calculadora, dice Not a Number . lo que me pregunto es por qué es un número no válido?

Nota: Apenas estoy terminando el octavo grado de matemáticas y no he aprendido del todo lo que hace la "e" en una ecuación. Creo que tiene algo que ver con poner el número a la potencia de diez veces el número después de la e.

2 votos

Además, la mayoría de las calculadoras tienen una tecla diferente para $-$ como símbolo de sustracción, y $-$ que significa que un número es negativo. En este caso, quieres el negativo.

8 votos

Esta no es una pregunta sobre matemáticas, sino sobre cómo se manejan los números en un ordenador/calculadora. (El formato IEE 754.)

8 votos

Aquí hay una buena cuestión de matemáticas para un alumno de octavo grado. En matemáticas, que es un número real perfectamente válido . Lo que la calculadora está diciendo es que su circuito interno no puede representar ese número real. Hay muchos números reales que los ordenadores y las calculadoras no pueden representar. Y los programadores dicen arrogantemente: "¡Eso no es un número!" cuando deberían decir: "Ese es un número perfectamente bueno, sólo que no podemos tratarlo".

14voto

Ken Puntos 3402

Tiene razón en su interpretación de la $e$ cosas. De hecho, este valor es

$2.2250738585072014 \cdot 10^{-308}$

Que es, sin duda, un número. Lo que ocurre es que, para almacenar correctamente este número, la calculadora necesitará una buena cantidad de memoria para almacenarlo con precisión, y básicamente has intentado agotarla.

11 votos

"Es que, para almacenar adecuadamente este número, la calculadora necesitará una buena cantidad de memoria para almacenarlo con precisión, y esencialmente has intentado agotarla". - esto no es una descripción exacta de lo que

0 votos

Bueno, cuando escribí "un buen trozo de memoria", iba a escribir "un buen trozo de memoria en el registro en el que se almacenaba el valor", pero no quería que la conversación se adentrara demasiado en la maleza. Como el registro activo en el formato de punto flotante de la calculadora sólo permite un número determinado de bits, el valor dado excederá esos bits y, por tanto, no será representable. O eso es lo que yo entiendo. Pido disculpas si mi planteamiento ha pasado por alto demasiados detalles.

0 votos

Para quien lea esto: el problema no es representar este número; el problema es representar a lote de diferentes números, éste incluido . En otras palabras, si lo único que tenía que hacer el cálculo era representar este número, sería trivial. Pero como tiene que ser capaz de representar muchos otros también, muchos tipos de números se vuelven diferentes de manejar, y éste es uno de ellos.

4voto

NabilS Puntos 533

Este es efectivamente un número, es extremadamente cercano al 0. Su número es aproximadamente $$2 \cdot 10^{-308} = 0.\underbrace{00\ldots 0}_{307 \text{ zeros}}2 \; ,$$ que es ligeramente mayor que cero.

No sé lo que quieres programar, pero a menudo uno quiere probar, si tal resultado es cero. Usted nunca debe hacer algo como esto:

res = 2.2E-10;
if (res == 0.0) { 
    Do something;
}

Esto no es bueno debido a la aritmética de punto flotante. En su lugar, usted quiere hacer algo como esto:

res = 2.2E-10;
epsilon = 1E-8; % A small value, to see, if our result is near enough at zero
if (abs(res - 0) < epsilon) { %Our value is 'near enough' at zero
    Do something;
}

2 votos

Por otro lado, se podría decir que es infinitamente mayor que cero

6 votos

Nunca digas "nunca". Hay veces en que una comparación exacta es correcta, y otras en que no lo es. Sin embargo, no sé qué tiene que ver esto con la pregunta principal.

0voto

Colin Pickard Puntos 4072

Es un número válido, sin duda. Pero cualquier ordenador sólo tiene un número limitado de combinaciones que puede almacenar como números. Supongamos que los números de su ordenador constan de 4 dígitos decimales. Entonces puede representar los números del 0000 al 9999, es decir, 10000 combinaciones. Pero el ordenador quiere reservar algunas de estas combinaciones como códigos para cosas que no son números. Supongamos que quiere calcular

$$ 0^0 $$

Esto no representa un número, por lo que el ordenador utilizará su código "NaN" (Not a Number) para representar el resultado. En nuestro hipotético ordenador puede reservar el número 9999 para esto. Entonces, si escribes 9999, que parece un número normal, el ordenador dirá que no es un número.

Tu calculadora también reserva una combinación de dígitos para el código "NaN". Puede parecer un poco aleatorio, pero eso es porque puedes ver la representación decimal. En binario puede ser algo como

$$ 0.0000000000000001_2 \times 2^{-0.000000001_2} $$

(No será exactamente eso, pero sí algo parecido. En cualquier caso, los índices " $_2$ "indica que son números binarios, no decimales)

-2voto

Lykos Puntos 644

En la llamada "notación científica" de los números, la e representa 10 a la potencia de x. Así que en tu caso 2,22... por 10 a la potencia de -308. Tu número resulta ser el número más pequeño representable por el tipo de datos muy común "double", una representación binaria de 64 bits en coma flotante. Así que tu calculadora es incapaz de representarlo porque es demasiado pequeño y te dice erróneamente que no es un número cuando en realidad es un número, simplemente demasiado pequeño.

2 votos

El exponente parece ser $-308$ es decir, el número es muy pequeño, no muy grande.

2 votos

2.22... to the power of 308 es muy diferente de 2.22... times 10 to the power of 308 que es muy diferente de 2.22... times 10 to the power of -308

0 votos

Sin embargo, $a \neq b \neq c$ no significa que $a \neq c$ ;)

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