我在嵌入式平台上工作,需要以更快的方式为某些算法进行浮点乘法。有谁知道快速实现,我可以放弃一些精确的速度。
答案 0 :(得分:1)
如果你的目标有一个FPU,那么它已经尽可能快地执行浮点乘法。但是,如果它没有FPU,那么最好使用定点算法。
在C语言中使用定点算法很复杂,因为没有内置的定点数据类型 - 每个操作都是一个显式函数调用,在C ++中不是很自然或可读,但是可以定义具有运算符和函数重载的fixed
类,使用固定点只是用float
替换double
或fixed
的情况,包括类型之间的自动转换。可以找到一个这样的库,其中包括一个综合的数学库,而不仅仅是简单的算术运算符here。在ARM上,它通常比软件浮点快5倍。
如果使用C ++代码,您可以在大多数情况下使用C ++编译来支持定点库,但实质上是编写C代码,就像它具有内置的fixed
类型一样。也就是说,你不需要使用或知道很多C ++来从这个库中受益,并且在编译为C的相同代码上没有任何开销。