libbeef: una biblioteca Rust de coma flotante arbitraria que reescribe libbf en Rust puro

Fuentes: libbeef: a pure-Rust port of Fabrice Bellard's libbf arbitrary-precision float library

libbeef es una traducción a Rust de libbf, la biblioteca de coma flotante de precisión arbitraria creada por Fabrice Bellard. El nombre es un acrónimo de "Beeg Float" y se distribuye bajo licencia MIT como un crate sin dependencias externas y compatible con entornos no_std (solo requiere alloc).

La biblioteca implementa la semántica completa de IEEE 754: ceros con signo, NaN, infinitos, anchura de exponente configurable, subnormales, los cinco modos de redondeo y las cinco banderas de estado. Ofrece además funciones trascendentes (exp, log, pow, sin, cos, tan, atan, atan2, asin, acos) y aritmética decimal independiente en base 10.

El diseño empareja cada valor con un formato en tiempo de compilación (Binary32, Binary64, Binary128 u otros), de modo que las operaciones aritméticas y trigonométricas usan automáticamente la precisión y el redondeo deseados sin argumentos adicionales. Internamente replica los algoritmos de la versión en C: multiplicación mediante transformada-teoría de números (NTT), división y raíz cuadrada por iteración de Newton, y trascendentes por AGM y binary splitting, con complejidades asintóticas óptimas en cada clase de operación.

Los benchmarks indican que libbeef sigue el rendimiento de libbf en C con un factor constante asociado a la verificación de límites y al modelo de asignación de Rust, iguala o supera a libbf en sin/cos/tan/pow y se sitúa entre 3 y 5 veces por debajo de MPFR. Frente a rug (enlace a GMP/MPFR), es de 2 a 3 veces más lento en división y raíz cuadrada, pero produce binarios sustancialmente más pequeños: 482 KiB frente a los 680 KiB de un programa equivalente con rug enlazado estáticamente, y por debajo incluso de bibliotecas de solo enteros como malachite.

libbeef supera la suite de verificación de libbf en todas las operaciones, precisiones y modos de redondeo, por lo que constituye una opción adecuada para proyectos que necesiten aritmética decimal o de coma flotante correcta y portable —incluidos WebAssembly, sistemas embebidos y compilaciones cruzadas— sin recurrir a una biblioteca del sistema en C.