Doble-doble: 31 dígitos de precisión sin abandonar la FPU

Fuentes: Double-double: 31 digits of precision without leaving the FPU

El formato double-double combina dos números binarios de doble precisión para representar aproximadamente 31 dígitos decimales sin recurrir a bibliotecas de precisión arbitraria. Cada valor almacena por separado la componente principal y el error de redondeo, de modo que su suma recupera la parte descartada por la operación original. El método se basa en transformaciones sin error, como el algoritmo two-sum de Knuth, que calcula la suma redondeada y el residuo exacto mediante operaciones aritméticas ordinarias, sin tipos más anchos, ramificaciones ni manipulación de bits.

La técnica ofrece una solución intermedia entre el formato double, de unos 15 dígitos decimales, y las bibliotecas de precisión arbitraria como MPFR. En un kernel real con precisión equivalente, double-double cuesta aproximadamente nueve veces más que double; MPFR, a su vez, resulta unas nueve veces más lento que double-double, es decir, alrededor de 81 veces más que double. Las diferencias cambian cuando MPFR asigna memoria por operación: en ese caso, la penalización puede acercarse a 40 veces.

Double-double no necesita reservas en el heap, dependencias nativas, binarios adicionales por plataforma ni enlaces de interoperabilidad en .NET. Esto simplifica su despliegue y evita algunas restricciones de licencia y distribución asociadas a GMP y MPFR. Su límite principal es que conserva el intervalo de exponentes de double, con desbordamiento cercano a 10^308, mientras que binary128 alcanza aproximadamente 10^4932. Por ello, resulta útil en cálculos donde double no basta pero la precisión arbitraria resulta excesiva, como zooms profundos del conjunto de Mandelbrot.