Biblioteca con tipo estándar (ish) para representar fracciones decimales

Me gustaría poder expresar fracciones decimales (es decir, m * 10^{-k} para enteros m,k) con precisión exacta, a diferencia de lo que tenemos con los valores binarios de coma flotante. Esencialmente hay dos opciones: punto flotante, pero decimal (como en esta propuesta ), o punto fijo con solo la mantisa almacenada.

Así que busco una biblioteca que implemente una de estas opciones, o ambas, razonablemente.

Requisitos:

  • Gratis
  • Encabezado-principalmente
  • LGPL o licencia FOSS laxa similar
  • no abandonado

Deseable:

  • Solo encabezado
  • Tan rápido como cabría esperar dada la falta de soporte de hardware para este
  • Bien documentada
  • Orientado a C++11/C++14
  • Sin dependencias externas significativas

Respuestas (2)

Puede consultar la biblioteca aritmética de precisión múltiple (GMP) de GNU posiblemente con la biblioteca MPFR de GNU, que son bibliotecas C para cálculos de punto flotante de precisión múltiple con redondeo correcto.

Hay enlaces para C++ y otros lenguajes.

  • Gratis
  • Licencia pública general reducida GNU de código abierto (LGPL v 3)
  • Último lanzamiento al momento de escribir: GMP 16 de diciembre de 2016 y MPFR 27 de septiembre de 2016, pero el VCS muestra registros esta semana para ambos.
  • La documentación se ve bien
  • MPFR depende de GMP
IIANM, La librería GMP no ofrece ninguno de los tipos que pedí. Lo más parecido que ofrecen son racionales y eso no es realmente lo que busco.

Parece que está buscando el paquete mpdecimal o su biblioteca libmpdec subyacente , que es "una implementación completa de la especificación aritmética decimal general".

Además, la página de propuestas a la que se vinculó ya enumera algunas otras implementaciones, en particular de Intel e IBM .