¿Por qué las computadoras no pueden usar números irracionales?

Las computadoras pueden usar números irracionales , pero no representándolos en decimales, binarios o alguna otra forma general de representar números. En su lugar, deben hacer cálculos simbólicos para saber, por ejemplo, que

[matemáticas] \ quad \ frac {\ sqrt2 + 1} {\ sqrt2-1} = 3 + 2 \ sqrt2 [/ matemáticas]

Para muchos matemáticos, esto representa un uso más sofisticado de los números irracionales que la mera aproximación decimal implementada en las calculadoras.

Las computadoras pueden hacer cosas notables con la computación simbólica, incluida la implementación de sistemas notablemente complejos como el motor de búsqueda de Google o Quora, pero por lo general ni siquiera usan números racionales o enteros para hacerlo. Por el contrario, implementan un conjunto estrictamente finito de números para aproximarse a esos conjuntos infinitamente contables, y tienen algún mecanismo de “desbordamiento” para tratar con números fuera del conjunto finito.

Los números irracionales, al ser un conjunto infinitamente incontable, representan un desafío adicional ya que no todos pueden ser representados por un sistema digital, incluso en principio. Sin embargo, muchos cálculos simbólicos perfectamente razonables son posibles como lo demuestra Wolfram Alpha entre otros motores de cálculo simbólico.

Los programas de computadora usan números irracionales cuando es necesario hacerlo y en ese caso los números irracionales se almacenan en la memoria de una manera diferente, por ejemplo, uno desearía almacenar sqrt (2) en x de modo que x ^ 2 sea exactamente 2 y no cerca de 2. Tenemos sistemas como Mathematica, Maple, etc. que producen la salida deseada. En tales escenarios, los números irracionales se almacenan como funciones. Además, algunos números irracionales pueden ser trascendentales como pi, que a menudo se almacenan de manera diferente en comparación con los números irracionales que no son trascendentales. Lea la siguiente respuesta para obtener más detalles: la respuesta de Avinash Mishra a ¿Por qué aún no hemos descubierto una forma económica de representar números irracionales?

Las computadoras pueden usar números irracionales, pero no pueden almacenar cadenas decimales (o binarias) de dígitos que puedan representar tales números. Cuando las personas escriben dígitos decimales en sus computadoras para usarlas en lo que se llama “cálculos numéricos”, la cadena decimal se analiza en una estructura que básicamente tiene la forma

[signo] [significado] [exponente]

donde [sign] dice si el número es positivo o negativo, [significand] representa los dígitos del número (en binario) y [exponent] dice qué tan grande o pequeño es realmente el número. El número se vería así como matemáticas:

[matemáticas] \ displaystyle {\ qquad \ pm a \ times2 ^ b,} [/ matemáticas]

donde [math] a [/ math] es el significado y [math] b [/ math] es el exponente, y ambos son enteros lo suficientemente pequeños como para que la computadora pueda almacenarlos. Este formato restringe lo que se puede representar (solo algunos números racionales), pero es útil porque la alternativa requeriría demasiada memoria y potencia de procesamiento.

Las computadoras pueden usar números irracionales si los almacenan simbólicamente, básicamente la forma en que usamos números irracionales. Pero normalmente, cuando las computadoras hacen aritmética, almacenan los números en forma numérica, porque esto es más eficiente para los cálculos.

Si la secuencia de cálculos se realiza con cuidado, los errores permanecen razonablemente pequeños y no se propagan para dominar el resto de los cálculos, al menos para la cantidad de cálculos que quisiéramos hacer. Pero esa es una historia completamente diferente …

Por el contrario, las computadoras pueden usar números irracionales. Para esto, necesitan realizar cálculos algebraicos o simbólicos . Los paquetes CAS (Computer Algebra System) están destinados exactamente para eso. Casi todos los programas informáticos actuales amplían la compatibilidad con CAS.

Sin embargo, una vez que un usuario solicita el equivalente decimal de dicho número, la computadora tiene que realizar el cálculo inmediatamente dependiendo de la memoria disponible y mostrar un resultado aproximado. Como tal, estos valores no se almacenan en la memoria a menos que se solicite explícitamente que lo haga.

Esto simplemente no es cierto.

Normalmente, las computadoras usan aritmética con representaciones de números enteros o de coma flotante por razones de velocidad y estas representaciones que no son adecuadas para representar números irracionales.

Pero si usa un sistema adecuado, por ejemplo Maxima (Maxima, un sistema de álgebra computacional), puede preguntar qué es [math] \ sqrt {2} * \ sqrt {2} [/ math] y el resultado será [math] 2 [/ math], con la mayor precisión posible, ya que se utiliza un sistema algebraico simbólico.

Ellos pueden. De hecho, las computadoras se pueden programar para procesar cualquier cosa que un humano pueda hacer (siempre y cuando el humano que lo programa tenga una comprensión total de ello).

Ya se han dado muchas buenas respuestas sobre números irracionales. Entonces, para ilustrar el punto y realmente martillarlo, este es un ejemplo de un programa que usa números imaginarios en C # :

estructura pública ComplexNumber
{
público doble real;
público doble imaginario;
doble magnitud pública
{
obtener
{
return Math.Sqrt (Math.Pow (real, 2d) + Math.Pow (imaginario, 2d));
}
}
Complejo público Número inverso
{
obtener
{
doble m = magnitud;
if (m devolver nuevo ComplexNumber (double.PositiveInfinity, double.PositiveInfinity);
doble a = Math.Acos (real / m);
if (imaginario> 0)
a = Math.PI * 2 – a;
devolver nuevo ComplexNumber (Math.Cos (a) / m, Math.Sin (a) / m);
}
}
operador público estático ComplexNumber + (ComplexNumber a, ComplexNumber b)
{
return new ComplexNumber (a.real + b.real, a.imaginary + b.imaginary);
}
Operador público Public ComplexNumber – (ComplexNumber a, ComplexNumber b)
{
return new ComplexNumber (a.real – b.real, a.imaginary – b.imaginary);
}
Operador público de número complejo estático * (número complejo a, número complejo b)
{
return new ComplexNumber (a.real * b.real – a.imaginary * b.imaginary, a.real * b.imaginary + a.imaginary * b.real);
}
operador público estático ComplexNumber / (ComplexNumber a, ComplexNumber b)
{
devuelve a * b.Inverse;
}
cadena de anulación pública ToString ()
{
return String.Format (“Real: {0}, Imaginary: {1}”, real, imaginario);
}
Public ComplexNumber (doble re, doble im) {
real = re;
imaginario = im;
}
}

Programa de clase
{
vacío estático Main (string [] args)
{
ComplexNumber a = new ComplexNumber (2, 7);
ComplexNumber b = new ComplexNumber (-4, 3);
Console.WriteLine (a / b);

// produce Real: 0.52, Imaginario: -1.36
// ¡Pruébalo por ti mismo!

Console.ReadKey ();
}
}

Las computadoras son binarias y solo pueden representar exactamente potencias de 2 y fracciones de potencias de 2, así como sumas, diferencias, productos y cocientes de ellas.

Todavía puede usar computadoras para hacer cálculos con números irracionales, pero siempre habrá un error de redondeo, ya que la computadora no puede representar exactamente un número irracional con una cadena infinita de dígitos. La mayoría de las computadoras modernas tienen al menos capacidad de coma flotante de precisión doble, lo que significa que pueden almacenar cualquier número de hasta 16 dígitos decimales.

Tengo algunas malas noticias para ti. Las computadoras solo pueden usar enteros y solo enteros hasta cierto valor, como [math] 2 ^ 32 [/ math] o [math] 2 ^ 64 [/ math]. Para representar no enteros, la computadora tiene que hacer algunos trucos con sus enteros para representar no enteros y no puede representar todos los no enteros exactamente (o enteros mayores que un cierto valor). Puede representar algunos números simbólicamente, para referirse a números que de otra manera no pueden ser representados por enteros de 32 bits o 64 bits.

Entonces, una computadora puede usar números irracionales, si hay alguna forma de acordar cómo representarlos usando solo 0 y 1.

Las computadoras trabajan en fragmentos de información de un tamaño fijo, generalmente 32 o 64 bits de información sí / no. Para la aritmética, los estándares definen las reglas de cálculo en un conjunto finito de números y se implementan en hardware. Entonces, las computadoras no funcionan en números irracionales ni racionales, están diseñadas para funcionar en un conjunto finito de números. Pero mientras algo se pueda representar finitamente, se puede emular en software. El software de cálculo formal hace exactamente eso, representa los valores mediante los cálculos necesarios para obtener ese valor.

Las computadoras pueden usar cualquier número con una representación lo suficientemente pequeña. “Sqrt (2)” es bastante pequeño, por lo que parece que las computadoras pueden usar números irracionales.