¿Todos los números reales tienen una expansión binaria?

Anexo : Después de escribir esta respuesta, me di cuenta de que hay una respuesta estrictamente matemática, aunque la voy a describir en términos generales. Un matemático miraría la expansión binaria, una serie infinita en este caso, y la analizaría como un problema en la teoría de límites. Puede mostrarse fácilmente, con algunas matemáticas, que dada una expansión binaria de un número irracional, puede acercarse arbitrariamente al número mirando suficientes términos. Por lo tanto, el límite de la expansión binaria es el número objetivo. En términos más crudos, esto implica que la expansión binaria “es igual” al número objetivo, que es cualquier número real que desee, exactamente.

De todos modos, aquí está el resto de mi respuesta:

Sí, pero porque casi todos” de estos números son irracionales (hay infinitamente más irracionales que racionales en cualquier intervalo dado), sus expansiones serán infinitamente largas en el lado derecho del punto decimal. Obviamente, ninguna computadora puede almacenar tal número con perfecta precisión, porque la computadora necesitaría una cantidad infinita de almacenamiento.

Como han dicho otros, la situación es la misma que con el sistema decimal (base 10). Cambiar a binario no cambia la situación.

La razón por la que no piensa en términos de expansión binaria de una cantidad fraccional es que nunca o rara vez se muestra de esa manera. Por convención, los lenguajes de programación tienden a restringir los valores de coma flotante a la representación decimal solo cuando se leen o escriben datos en la pantalla (o en la especificación de valores literales). Pero considere este número binario:

1.011 binario

Esto significa 1 + 1/4 + 1/8 = 1.375 decimal. Y sí, si se le permite usar un número infinito de dígitos, puede almacenar cualquier valor de número real, que también es cierto para el decimal.

Considere que pi puede representarse en binario tan fácilmente como en decimal … pero la expansión binaria de pi es infinitamente larga, como lo es su expansión decimal.

Curiosamente, hay algunos lenguajes de programación (creo que las versiones antiguas de Fortran) equivalen a “números reales” con números de coma flotante … Sin embargo, si lo piensa, los números de coma flotante están restringidos a valores de números racionales, por las razones Yo digo arriba. No hay ningún tipo de punto flotante que pueda almacenar un irracional, ¡no realmente!

Sin embargo, es raro escuchar valores de punto flotante denominados tipos de “números racionales”, por la razón de que un tipo de datos “racional” verdadero probablemente se implementaría como dos enteros a y b, en los que el valor a / b está implícito . En tal clase racional o fraccional (que desarrollo en mi libro, C ++ sin miedo), se supone que los números a / b están en alguna forma “normalizada” en la que se excluyen muliples comunes, por lo tanto (por ejemplo) 4/8 se reduce a 1/2. Este es un uso perfecto para la programación orientada a objetos, porque esta reducción de fracciones puede ser completamente automatizada.

¿Todos los números reales tienen una expansión binaria?

Seguro. No hay nada mágico sobre el sistema decimal. Podemos expresar cualquier número real en él (aunque algunos números nunca terminarán). Lo mismo para binario.

Sí, de hecho, incluso se podría tratar de verlo como una especie de auto-verdad: una de las formas comunes de definir axiomáticamente los números reales es como secuencias de Cauchy, lo que básicamente significa que su definición es entonces como el límite de todas las expansiones binarias posibles.

Sí, cada número real tiene una expansión binaria única. Es posible probar esto también. Obtendrá la prueba en cualquier libro de renombre sobre análisis real.