57

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

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

有什么建议么?

4

7 回答 7

8

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

它是一个为 C++ 用户提供 C++ 类接口的 C 静态库,它实现了以下功能:Trig。函数:sin、cos、tan、asin、acos、atan、atan2 饱和算术:sadd、ssub、smul、sdiv 其他函数:sqrt、exp

它只支持16.16 定点数据类型

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

于 2011-03-02T17:14:08.173 回答
5

查看以下关于在 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++ 中实现定点数。

于 2014-01-14T10:51:33.953 回答
3

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

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

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

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

于 2015-03-04T23:35:13.733 回答
2

我有一个不错的小 c++ 头文件。你可以在sweet::Fixed下找到它。简单定义 typedef sweet::Fixed MyFloat; 并像任何其他浮点值一样使用它。或者稍后交换您想要的任何浮点类型。该类有两个 64 位值。一个用于整数部分,一个用于小数部分。

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

typedef float MyFloat;         // This will feel the same
typedef sweet::Fixed MyFloat;  // like this
于 2014-01-14T10:37:33.280 回答
0

I will try http://www.efgh.com/software/fixed.htm tiny lib...

于 2011-01-04T12:58:52.160 回答
-3

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

GMP库

或在这里:

MPFR 库

于 2010-05-31T20:36:29.627 回答
-4

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

于 2010-05-31T20:37:56.570 回答