Representación de números enteros

En esta página, aprenderás cómo las computadoras almacenan enteros no negativos.

Como saben, los números aparecen en todas partes en los algoritmos informáticos —incluso si los números no son el tema. Por ejemplo, el usuario puede estar interesado en una imagen, pero esa imagen es una abstracción sobre los números. Los números también se utilizan para encontrar un elemento específico en una lista. En las siguientes páginas, observará más de cerca los números dentro de la computadora.

  1. Si observas el código, verás que es un reportero recursivo. ¿Cómo funciona? Viste la recursión por primera vez en Unidad 3 Laboratorio 1 Página 2: Arte fractal.
    El factorial de un número entero positivo n (escrito "n!") es el producto de todos los números enteros desde 1 hasta n. Por ejemplo:

    5! = 1 \times 2 \times 3 \times 4 \times 5 = 120

    Haz clic para cargar un proyecto nuevo. Entonces guárdalo. Prueba estas entradas:
    Puede que veas diferentes resultados dependiendo del procesador de tu computadora.
    1. (5)! reporta 120
    2. (10)! reporta 3628800
    3. (20)! reporta 2432902008176640000
    4. (30)! reporta 2.6525285981219103e+32
    5. El "e+" significa "por diez elevado a la potencia de" por lo que esta anotación significa 2.6525285981219103 × 1032 = 265,252,859,812,191,030,000,000,000,000,000.

Hardware de computadora de ancho fijo

Ancho (width): el número de bits que procesa una CPU a la vez

Palabra (word): una secuencia binaria con esa cantidad de bits

Entonces, ¿por qué Snap! muestra 20! en la representación ordinaria de números enteros, pero 30! en notación científica? Cada modelo de computadora está diseñado con un cierto ancho, el número de bits que el procesador lee de la memoria o escribe en la memoria a la vez. Ese número de bits se denomina palabra. A partir de 2016, la mayoría de las computadoras nuevas tienen 64 bits de ancho. ¡La primera microcomputadora, vendida en 1971, tenía cuatro bits de ancho!

Si obtuviste una respuesta en notación científica para 20!, estás usando una computadora de 32 bits.
DAT-1.B.1

Una palabra de 64 bits representa 264 diferentes valores. Usamos la mitad para los números negativos, uno para el cero y el resto para los positivos. La mitad de 264 (que es 263 = 9,223,372,036,854,775,808) es aproximadamente 9 × 1018. ¡Eso significa que los 19 dígitos de 20! apenas cabe en una palabra de 64 bits. ¡Pero no los 33 dígitos de 30! Por lo tanto, el hardware de la computadora reporta un error de desbordamiento (overflow en inglés), y Snap! calcula una aproximación.

¿Los anchos de los procesadores siempre son potencias de dos?
Los anchos de procesador no tienen que ser una potencia de dos. Algunas computadoras antiguas—del tipo que se ve en películas antiguas que llenaban una habitación grande —usaban palabras de 12-bit, 36-bit, y 60-bit. Pero las computadoras personales modernas comenzaron en 8 bits y los anchos se han duplicado con cada nueva generación.
  1. Experimenta en Snap!. ¿Cuál es el primer número entero cuyo factorial no cabe en una palabra?

Números grandes

(Bignums)
Un número entero de varias palabras se denomina bignum.
DAT-1.B.2

¿Por qué los lenguajes de programación no pueden usar más de una palabra para representar un entero? Pueden. Es solo que una sola instrucción de lenguaje de máquina solo puede agregar números de una palabra. Un lenguaje de programación debe trabajar un poco más duro para que la sume funcione con valores de varias palabras. No todos los idiomas hacen esto, pero los idiomas de más alto nivel sí.

Actividades desafiantes
  1. Un gran ejemplo de un lenguaje de programación de alto nivel es Scheme [Esquema]. Puedes aprenderlo del libro gratuito en línea Estructura e interpretación de los programas informáticos.
El diseño de un lenguaje de programación no es solo una cuestión de gustos; puede ser una cuestión de vida o muerte. Entre 1985 y 1987, una máquina terapéutica de rayos X mató a cuatro pacientes e hirió gravemente a dos más debido a varios errores en su software; uno de los errores era que un contador que se mantenía en una variable de ocho bits de ancho alcanzaría su valor máximo de 127 y luego desbordamiento a cero en lugar de 128. Cuando la variable era cero, no se realizaba una comprobación de seguridad importante. Esto no habría sucedido si el software hubiera sido escrito en un mejor lenguaje de programación.
    Puedes usar bignums en cualquier proyecto de Snap! importando la biblioteca "Bignums, racionales exactos, complejos #s".
  1. Haz clic en este bloque en el área de programas:
    USE BIGNUMS (verdadero)
  2. Ahora prueba 30! otra vez.
    30! reporta 265252859812191058636308480000000
    Este valor (exactamente correcto) es diferente del valor (redondeado) del punto flotante anterior. (Más sobre el punto flotante en un momento).
  3. Prueba 200!. El resultado reportado no encajará en tu pantalla, pero puedes verlo de esta manera:
    1. Mantén pulsada la tecla de control y haz clic en el bloque () !.
    2. En el menú que aparece, elige "imagen de resultado".
    3. Una imagen se descargará en tu computadora o se abrirá en una nueva pestaña. Deberías poder ampliarla para leer los dígitos.
  4. ¿Cuántos dígitos hay en 200!? (No cuentes a mano; tienes una computadora.)