Библиотека стандартного типа для представления десятичных дробей

Я хотел бы иметь возможность выражать десятичные дроби (т.е. m * 10^{-k} для целых чисел m,k ) с точной точностью - в отличие от того, что мы имеем с двоичными значениями с плавающей запятой. По сути, есть два варианта: с плавающей запятой, но десятичной (как в этом предложении ) или с фиксированной запятой, где хранится только мантисса.

Итак, мне нужна библиотека, которая разумно реализует один из этих вариантов или оба.

Требования:

  • Бесплатно
  • Заголовок-в основном
  • LGPL или аналогичная нестрогая лицензия FOSS
  • Не заброшенный

Желательно:

  • Только заголовок
  • Так быстро, как можно было ожидать, учитывая отсутствие аппаратной поддержки этого
  • Хорошо задокументированы
  • C++11/C++14-ориентированный
  • Отсутствие значительных внешних зависимостей

Ответы (2)

Вы можете посмотреть Библиотеку арифметики с множественной точностью GNU (GMP), возможно, с библиотекой GNU MPFR , которая представляет собой библиотеки C для вычислений с плавающей запятой с множественной точностью с правильным округлением.

Есть привязки для C++ и других языков.

  • Бесплатно
  • Стандартная общественная лицензия ограниченного использования GNU с открытым исходным кодом (LGPL v 3)
  • Последний выпуск на момент написания: GMP 16 декабря 2016 г. и MPFR 27 сентября 2016 г., но VCS показывает проверки на этой неделе для обоих.
  • Документация выглядит хорошо
  • MPFR зависит от GMP
IIANM, библиотека GMP не предлагает ни один из типов, о которых я просил. Самое близкое, что они предлагают, - это рациональные решения, и это не совсем то, что мне нужно.

Похоже, вы ищете пакет mpdecimal или лежащую в его основе библиотеку libmpdec , которая является «полной реализацией Общей спецификации десятичной арифметики».

Кроме того, на странице предложений , на которую вы ссылаетесь, уже перечислены некоторые другие реализации, в частности, от Intel и IBM .