C ++定点库?

我正在寻找一个免费的C ++定点库(主要用于embedded式设备,而不是任意的精确math)。 基本上,要求是:

  • 没有不必要的运行时间开销:编译时可以做的任何事情都应该在编译时完成。
  • 能够在固定和浮点之间透明地切换代码,没有固有的开销。
  • 定点math函数。 如果你需要来回转动以获取平方根,那么使用固定点就没有多大意义。
  • 占地面积小

有什么build议么?

有一个开源的定点math库项目,可以通过下面的链接find:

  • libfixmath项目页面
  • libfixmath维基百科文章

它是一个C静态库,具有用于C ++用户的C ++类接口,它实现以下function:Trig。 函数:sin,cos,tan,asin,acos,atan,atan2饱和算术运算:sadd,ssub,smul,sdiv其他函数:sqrt,exp

它只支持16.16定点数据types 。

这是一个积极开发的开源项目(寻找感兴趣的开发者)。

查看以下两个有关在C ++中处理定点表示的好实现(不需要外部库)。

  1. 由Peter Schregle提供的固定点类 。 它也有效地实现了加法乘法除法等基本操作。

    代码示例:

    #include <fixed_point.h> using namespace fpml; main() { fixed_point<int, 16> a = 256; fixed_point<int, 16> b = sqrt(a); } 
  2. 用Khuram Ali 在C ++中实现定点数 。

我有一个很好的小c ++头。 你可以在sweet :: Fixed下find它。 简单的定义typedef sweet ::修复MyFloat; 并像使用其他浮点值一样使用它。 或者换一换你想要的浮动types。 该类有两个64位值。 一个用于整数部分,另一个用于小数部分。

我在sweet.hpp中有一个小的固定点c ++ 11类头impl,叫做fixed.hpp 。 它使用32位两个部分。

 typedef float MyFloat; // This will feel the same typedef sweet::Fixed MyFloat; // like this 

这是一个GitHub上的开源定点库:

https://github.com/mbedded-ninja/MFixedPoint

它支持32位和64位定点数字(具有任意商),并且都是快速的(一切都是模板化的,但是更多的是手动的)和较慢的定点数字(更自动,但更慢)。

它面向embedded式平台,但是我已经在微控制器和Linux上使用它,没有任何问题。

也许你可以试试GMP或MPFR库。 我很肯定他们会满足你的性能需求,但也许他们太多了你的需求,你想要更轻量级的东西。 无论如何,看这里:

GMP库

或在这里:

MPFR库

我还没有使用SPUC ,但描述声称定点数据types和一些math函数。