用C语言实现了用单精度(32位浮点)计算三角函数(sin,cos,arctan)的一些逼近,它们的精度可达到+/- 2 ulp。
我的目标设备不支持任何<cmath>
或<math.h>
方法。它不提供FMA,但提供MAC ALU。ALU和LU以32位格式计算。
我的arctan近似实际上是N.juffa的逼近的一个修改版本,它在整个范围内近似于arctan。正弦和余弦函数在-pi,pi范围内的精度可达2 ulp。
我现在的目标是为正弦和余弦提供更大的输入范围(尽可能大,理想情况下是FLT_MIN、FLT_MAX),这将导致我进行参数约简。
我目前正在阅读不同的论文,比如一个大论点的RGUMENT缩减: K.C.Ng的好到最后一位或关于这个一种新的参数约简算法的文章,但是我无法从它得到一个实现。
此外,我还想提到两个涉及相关问题的堆栈溢出问题:有一个基于我链接的第一篇论文的基于matlab和c++的方法。它实际上是使用matlab,c数方法,它将输入限制在0,20.000。评论中已经提到了另一个问题。这是一种在C中实现sin和cos的方法,使用各种对我来说不可用的c库。由于这两个职位已经有几年的历史,可能会有一些新的发现。
在这种情况下使用的算法似乎是将2/pi的个数精确地存储到所需的位数,以便能够精确地计算模块计算,同时避免取消。我的设备不提供大的DMEM,这意味着不可能有数百位的大型查找表。这个过程实际上是在这参考的第70页上描述的,顺便说一句,它提供了许多关于浮点数学的有用信息。
因此,我的问题是:是否有另一种有效的方法来减少正弦和余弦的参数,以获得单一精度,避免大的LUTs?上面提到的论文实际上侧重于双精度和使用1000位数,这不适合我的使用。
实际上,我还没有在C中找到任何实现,也没有针对单个精确计算的实现,我将非常感谢您提供任何提示/links /examples.
https://stackoverflow.com/questions/64058564
复制相似问题