Computación de 128 bits

En la arquitectura de los ordenadores, los enteros de 128 bits, las direcciones de memoria u otras unidades de datos son aquellos que tienen 128 bits (16 octetos) de ancho. Además, las arquitecturas de CPU y ALU de 128 bits son aquellas que se basan en registros, buses de direcciones o buses de datos de ese tamaño.

Aunque actualmente no hay procesadores de propósito general de uso general construidos para operar con enteros o direcciones de 128 bits, varios procesadores tienen formas especializadas de operar con trozos de datos de 128 bits. El IBM System/370 podría considerarse el primer ordenador sencillo de 128 bits, ya que utilizaba registros de punto flotante de 128 bits. La mayoría de las CPUs modernas cuentan con conjuntos de instrucciones de instrucción única y datos múltiples (SIMD) (Streaming SIMD Extensions, AltiVec, etc.) en los que los registros vectoriales de 128 bits se utilizan para almacenar varios números más pequeños, como cuatro números de coma flotante de 32 bits. Una única instrucción puede operar entonces sobre todos estos valores en paralelo. Sin embargo, estos procesadores no operan sobre números individuales de 128 dígitos binarios; sólo sus registros tienen el tamaño de 128 bits.

El DEC VAX soportaba operaciones sobre tipos de datos enteros de 128 bits (‘O’ u octapalabra) y de punto flotante de 128 bits (‘H-float’ o HFLOAT). La compatibilidad con estas operaciones era una opción de actualización en lugar de ser una característica estándar. Dado que los registros del VAX tenían 32 bits de ancho, una operación de 128 bits utilizaba cuatro registros consecutivos o cuatro palabras largas en la memoria.

La serie ICL 2900 proporcionaba un acumulador de 128 bits, y su conjunto de instrucciones incluía aritmética de punto flotante y decimal empaquetada de 128 bits.

Del mismo modo que los compiladores emulan, por ejemplo, la aritmética de enteros de 64 bits en arquitecturas con tamaños de registro inferiores a 64 bits, algunos compiladores también admiten la aritmética de enteros de 128 bits. Por ejemplo, el compilador de C GCC 4.6 y posteriores tiene un tipo de entero de 128 bits __int128 para algunas arquitecturas. GCC y los compiladores compatibles señalan la presencia de aritmética de 128 bits cuando se define la macro __SIZEOF_INT128__. Para el lenguaje de programación C, el soporte de 128 bits es opcional, por ejemplo, a través del tipo int128_t, o puede ser implementado por una extensión específica del compilador. El lenguaje de programación Rust tiene soporte incorporado para enteros de 128 bits, que está implementado en todas las plataformas. Un tipo de 128 bits proporcionado por un compilador de C puede estar disponible en Perl a través del módulo Math::Int128.

Un registro de 128 bits puede almacenar 2128 (más de 3,40 × 1038) valores diferentes. El rango de valores enteros que se pueden almacenar en 128 bits depende de la representación de enteros utilizada. Con las dos representaciones más comunes, el rango es de 0 a 340.282.366.920.938.463.463.374.607.431.768.211.455 (2128 – 1) para la representación como número binario (sin signo), y -170,141,183,460,469,231,731,687,303,715,884,105,728 (-2127) hasta 170,141,183,460,469,231,731,687,303,715,884,105,727 (2127 – 1) para la representación como complemento a dos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *