Class Library for Numbers ( CLN ) es una biblioteca gratuita para aritmética de precisión arbitraria . Opera con enteros con signo , números racionales , números de punto flotante , números complejos , números modulares y polinomios univariados . Su lenguaje de programación de implementación es C++ .
CLN utiliza técnicas orientadas a objetos y sobrecarga de operadores para lograr una sintaxis algebraica natural : la suma x de dos variables a y b se escribe como x = a + b , a diferencia de la función suma(& x , a , b ).
CLN utiliza la herencia de clases para modelar los subconjuntos naturales de los tipos de números disponibles: por ejemplo, la clase entera es un subtipo de la clase racional, del mismo modo que los números enteros son un subconjunto de los números racionales. Los números complejos y todos sus subtipos se comportan exactamente como los tipos de números conocidos por el lenguaje Common Lisp , dándole a CLN otro significado: se convierte en una abreviatura de Common Lisp Numbers . Debido a esto, CLN puede ser y se utiliza para implementaciones de Common Lisp, otros lenguajes interpretados o sistemas de álgebra informática .
La implementación es eficiente. Se puede configurar para utilizar la biblioteca de precisión múltiple GNU como núcleo para bucles internos de velocidad crítica e implementa algoritmos avanzados como la multiplicación de Schönhage-Strassen , la división binaria [1] para calcular ciertas constantes matemáticas y otras. Todos los objetos CLN son inmediatos o cuentan con referencias , lo que permite una recolección de basura no interrumpida sin carga para la aplicación principal.