如何使用整数进行浮点计算

时间:2013-04-09 18:41:26

标签: c floating-point embedded fixed-point

我有一个连接到主处理器的协处理器。某些浮点计算需要在协处理器中完成,但它不支持硬件浮点指令,并且仿真速度太慢。

现在一种方法是让主处理器缩放浮点值,以便它们可以表示为整数,将它们发送给执行某些计算的协处理器,并在返回时缩减这些值。然而,这在大多数情况下都不会起作用,因为数字最终会变得太大或太小而不能超出这些整数的范围。所以我的问题是,正确做到这一点的最快方法是什么。

2 个答案:

答案 0 :(得分:13)

你说仿真太慢了。我猜你的意思是模仿浮点数。如果缩放的整数是唯一剩下的替代选择是固定点数学,但它也不是很快,即使它比模拟浮点数快得多。

此外,你永远不会逃避这样一个事实:使用缩放整数和fixed point math,你将比浮点数少dynamic range

但是,如果事先知道你的范围,可以根据你需要的范围调整定点数学实现。

Here is关于定点的文章。诀窍的要点是决定如何拆分变量,数字的低位和高位有多少位。

C的固定点的完整实现可以是found here。 (BSD许可证。)有are others

答案 1 :(得分:3)

除了@Amigable Clark Kant的建议外,Anthony Williams' fixed point math library提供了一个C ++ fixed类,可以与floatdouble几乎互换使用,而ARM则提供5x软件浮点的性能提升。它包括标准数学库的完整fixed点版本,包括使用CORDIC算法的trig和log函数等。

相关问题