С++ библиотека с фиксированной точкой?
Я ищу бесплатную С++-библиотеку с фиксированной точкой (главным образом для использования со встроенными устройствами, а не для произвольной математики точности). В основном, требования:
- Отсутствие излишних издержек во время выполнения: все, что можно сделать во время компиляции, должно выполняться во время компиляции.
- Возможность прозрачного переключения кода между фиксированной и плавающей точкой без каких-либо накладных расходов.
- Математические функции с фиксированной точкой. Нет смысла использовать фиксированную точку, если вам нужно отбрасывать назад и вперед, чтобы получить квадратный корень.
- Малый размер.
Любые предложения?
Ответы
Ответ 1
Существует проект библиотеки с фиксированной точкой с открытым исходным кодом, который можно найти по ссылкам ниже:
Это статическая библиотека C с интерфейсом класса С++ для пользователей С++, она реализует следующие функции:
Тригонометрический Функции: sin, cos, tan, asin, acos, atan, atan2
Насыщенная арифметика: sadd, ssub, smul, sdiv
Другие функции: sqrt, exp
Он поддерживает только 16.16 тип данных с фиксированной точкой.
Это активно разработанный проект с открытым исходным кодом (ищет заинтересованных разработчиков).
Ответ 2
Ознакомьтесь с двумя хорошими вариантами реализации обработки неподвижных точек в С++ (не требуется никаких внешних библиотек).
-
Fixed-Point-Class от Peter Schregle. Он также эффективно реализует основные операции, такие как сложение, умножение и деление.
Пример кода:
#include <fixed_point.h>
using namespace fpml;
main()
{
fixed_point<int, 16> a = 256;
fixed_point<int, 16> b = sqrt(a);
}
-
Реализация чисел с фиксированной точкой в С++ от Khuram Ali.
Ответ 3
Я попробую http://www.efgh.com/software/fixed.htm
крошечная библиотека...
Ответ 4
У меня есть хороший небольшой С++-заголовок. Вы можете найти его под sweet:: Fixed. Просто определите typedef sweet:: Fixed MyFloat; и использовать его, как и любое другое значение float. Или замените его каким бы то ни было плавающим типом. Класс имеет два 64-битных значения. Один для целочисленной части и для фракции.
У меня есть небольшая фиксированная точка С++ 11 class header impl в sweet.hpp называется fixed.hpp, Он использует 32bit для обеих частей.
typedef float MyFloat; // This will feel the same
typedef sweet::Fixed MyFloat; // like this
Ответ 5
Вот библиотека с фиксированной точкой с открытым исходным кодом на GitHub:
https://github.com/mbedded-ninja/MFixedPoint
Он поддерживает 32-битные и 64-разрядные номера с фиксированной точкой (с произвольным коэффициентом) и оба быстро (все шаблоны, но немного более ручные) и медленные номера фиксированной точки (более автоматические, но медленные).
Он ориентирован на встроенные платформы, однако я использовал его как на микроконтроллерах, так и на Linux без каких-либо проблем.
Ответ 6
Возможно, вы могли бы попробовать библиотеки GMP или MPFR. Я уверен, что они будут удовлетворять ваши потребности в производительности, но, возможно, они слишком много для ваших нужд, и вам нужно что-то более легкое. Во всяком случае, посмотрите здесь:
Библиотека GMP
или здесь:
Библиотека MPFR
Ответ 7
Я никогда не использовал SPUC, но в описании рассматриваются типы данных с фиксированной запятой и некоторые математические функции.