Las computadoras tienen una capacidad de almacenamiento finita, por lo que sólo pueden guardar de forma exacta una cantidad finita de números. Debido a esto, algunos números deben ser guardados de forma aproximada.

Hasta 1985, año en que se aprobó el estándar IEEE 754, cada fabricante usaba sus propias reglas para guardar los números de forma aproximada, y para operar con estas aproximaciones. El proceso de aprobación de este estándar involucró negociaciones entre los mayores fabricantes de procesadores de la época, reunidos en un Comité de expertos, donde destacó la participación del matemático William Kahan (Canadá 1933).

El Comité

En 1977 se crea en Estados Unidos un “Comité” para estandarizar la forma de representar números en punto flotante en una computadora, y de operar con estos. Este Comité, que contaba con el patrocinio del Instituto de Ingenieros Eléctricos y Electrónicos (IEEE), fue integrado por representantes de los fabricantes más importantes de la época: Intel, Motorola, Zilog, National Semiconductors, CDC (Control DataCorp), DEC (Digital Equipment Corporation), Cray. El Comité se reunía principalmente en San Francisco, California, en la zona de Sillicon Valley.

Intel envió a William Kahan, un matemático de la universidad de Berkeley, California. Kahan estaba trabajando en el desarrollo del co-procesador i8087 de Intel; un circuito integrado especializado en realizar operaciones matemáticas de punto flotante, que sería utilizado por el procesador 8086 de Intel.

William Kahan, representante de Intel en el Comité de expertos.
El matemático William Kahan, representante de Intel en el Comité de expertos.

Según Kahan:

“Intel iba a soprender al mundo. Ibamos a tener un chip con lo esencial de una librería matemática, usando sólo 40 mil transistores”.

Co-procesador 8087 de Intel, en cuyo diseño trabajaba el matemático William Kahan, representante de Intel en el Comité de expertos.
Co-procesador 8087 de Intel, en cuyo diseño trabajaba el matemático William Kahan, representante de Intel en el Comité de expertos.

Propuesta K-C-S

Luego de la primer reunión, Kahan, junto con su estudiante Jerome Coonen, y el profesor Harold Stone, elaboraron una propuesta para llevar al Comité en nombre de Intel: la propuesta K-C-S (por las siglas de quienes la propusieron). El fabricante DEC presentó una propuesta similar. La mayor diferencia entre ambas era la forma en que trataban el “underflow”.

La batalla del underflow

El “underflow” ocurre cuando, al realizar una operación, se obtiene un resultado de mangitud inferior al valor más cercano a cero que puede almacenar una computadora. En este caso lo usual era asignar el valor cero al resultado de la operación.

Sin embargo, la propuesta KCS de Intel proponía incorporar un “uderflow gradual” (UG), que permitiera disminuir errores en las operaciones de punto flotante. Para esto era necesario agregar más números entre el cero y el número representable que hasta ese momento era el más cercano a cero. A estos nuevos números se los llamó números “des-normalizados”, en contraposición a los que existían hasta ese momento, llamados “normalizados”.

Normalizados vs. Des-normalizados
Números representables de forma exacta. Des-normalizados (rojo) cubren parte de la región entre el cero y los Normalizados (azul).

En los números “normalizados” el bit de mayor peso (más significativo) debe ser siempre un uno; mientras que en los “des-normalizados” se permite un cero como bit más significativo. Esto último permite obtener números más cercanos al cero, aunque estos serán de menor precisión (pues se sacrifican bits de la mantisa para lograr un exponente más negativo).

Sin embargo, DEC se oponía al “underflow gradual”, pues opinaba que este procedimiento reducía demasiado la velocidad de las operaciones. Para convencer al Comité, Kahan llevó a su estudiante George Taylor, que mostró que era factible implementar UG con una velocidad razonable. Pero DEC no aceptó la derrota, y se propuso probar que, aunque UG se pudiera implementar con velocidad razonable, el procedimiento no servía para disminuir errores en las operaciones. Sin embargo, en 1981, en una reunión del Comité en Boston, Pete Stewart, el experto contratado por DEC, concluyó que UG sí era útil para reducir errores en las operaciones de punto flotante, y triunfó la propuesta KCS de Intel.

IEEE 754 v1

En 1985, casi una década después de creado el Comité, se aprobó oficialmente el estándar IEEE 754. Ya desde el año anterior, 1984, el estándar había sido implementado en procesadores de Intel, AMD, Apple, ELXSI, IBM, Motorola, National Semiconductors, Weitek, Zilog, AT&T, etc.

La elaboración del estándar demandó el trabajo de 92 personas, entre los que se cuentan matemáticos e ingenieros. La aprobación y uso del estándar por parte de los mayores fabricantes de procesadores, facilitó la portabilidad del software entre computadoras de distintos fabricantes.

Google bfloat16

El IEEE 754 sigue siendo el estándar más utilizado por los fabricantes de procesadores, pero no es el único. En 2017 Google introdujo el chip TPUv2, con su propio sistema de punto flotante: el bfloat16 (“brain floating point” de 16 bits). Este sacrifica precisión (bits de mantisa o fracción), a cambio de mayor rango (bits del exponente).

Google bfloat16 vs. ieee32
Asignación de bits en el Google bfloat16 de 16 bits, y en el IEEE de 16 bits y 32 bits.

En entrenamiento e inferencia de redes neuronales, el bfloat16 de Google obtiene similar prestación que el punto flotante IEEE de 32 bits, pero con una mayor velocidad.

Referencias

  1. IEEE 754: An interview with William Kahan. Revista Computer (marzo 1998).

  2. An Interview with the Old Man of Floating-Point. Charles Severance (febrero 1998).

  3. Floating Point Numbers. Cleve’s Corner. Cleve Moler (julio 2014).

  4. What Is Bfloat16 Arithmetic?. Nick Higham (junio 2020).