C ++定点库?

时间:2010-05-31 20:01:49

标签: c++ math fixed-point

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

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

有什么建议吗?

7 个答案:

答案 0 :(得分:6)

有一个开源定点数学库项目,可以通过以下链接找到:

它是一个C静态库,为C ++用户提供C ++类接口,它实现了以下功能: 触发。功能:罪,cos,棕褐色,asin,acos,atan,atan2 饱和算术:sadd,ssub,smul,sdiv 其他功能:sqrt,exp

它只支持16.16 fixed-point datatype

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

答案 1 :(得分:5)

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

    Peter Schregle的
  1. Fixed-Point-Class。它还有效地实现了基本操作,如添加乘法划分

    代码示例:

    #include <fixed_point.h>
    using namespace fpml;
    
    main()
    {
        fixed_point<int, 16> a = 256;
        fixed_point<int, 16> b = sqrt(a);
    }
    
  2. Khuram Ali
  3. Implementing Fixed-Point Numbers in C++

答案 2 :(得分:1)

我会尝试http://www.efgh.com/software/fixed.htm 小小的... ...

答案 3 :(得分:1)

我有一个很好的小c ++标题。您可以在sweet::Fixed下找到它。只需定义typedef sweet :: Fixed MyFloat;并像任何其他浮点值一样使用它。或者换一下你想要的漂浮类型。该类有两个64位值。一个用于整数部分,一个用于分数。

我在sweet.hpp中有一个名为 fixed.hpp 的小定点c ++ 11类头文件。它对两个部分都使用32位。

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

答案 4 :(得分:1)

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

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

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

它面向嵌入式平台,但我在微控制器和Linux上都使用它而没有任何问题。

答案 5 :(得分:-3)

也许您可以尝试使用GMP或MPFR库。我很确定它们会满足您的性能需求,但也许它们太满足您的需求而您想要更轻量级的东西。无论如何,请看这里:

GMP library

或在这里:

MPFR library

答案 6 :(得分:-3)

我从未使用SPUC,但描述声明了定点数据类型和一些数学函数。