相关疑难解决方法(0)

C 中三角函数的单精度参数约简

我已经在 C 中实现了用单精度(32 位浮点)计算的三角函数(sin、cos、arctan)的一些近似值。它们精确到大约 +/- 2 ulp。

我的目标设备不支持任何<cmath>方法<math.h>。它不提供FMA,而是提供MAC ALU。ALU 和 LU 以 32 位格式进行计算。

我的反正切近似实际上是N.juffa 近似的修改版本,它在整个范围内近似反正切。正弦和余弦函数在 [-pi,pi] 范围内精确度高达 2 ulp。

我现在的目标是为正弦和余弦提供更大的输入范围(尽可能大,最好是 [FLT_MIN,FLT_MAX]),这使我能够减少参数。

我目前正在阅读不同的论文,例如KCNg 的 A RGUMENT REDUCTION FOR HUGE ARGUMENTS: Good to the Last Bit或有关此新参数缩减算法的论文,但我无法从中导出实现。

另外,我想提一下两个涉及相关问题的 stackoverflow 问题:有一种使用 matlab 和 c++ 的方法,它基于我链接的第一篇论文。它实际上使用 matlab、cmath 方法,并将输入限制为 [0,20.000]。另一种已经在评论中提到了。这是一种在 C 中实现 sin 和 cos 的方法,使用了我无法使用的各种 c 库。由于这两篇文章已经有几年的历史了,可能会有一些新的发现。

看起来这种情况下最常用的算法是将 2/pi 的数量精确存储到所需的位数,以便能够准确地进行模计算,同时避免取消。我的设备不提供大型 DMEM,这意味着无法查找具有数百位的大型查找表。该过程实际上在参考文献的第 70 页上进行了描述,顺便说一句,它提供了许多有关浮点数学的有用信息。

所以我的问题是:是否有另一种有效的方法来减少正弦和余弦的参数以获得单精度,避免使用大的 LUT?上面提到的论文实际上专注于双精度并使用最多 1000 位数字,这不适合我的用例。

实际上我还没有找到任何 C 语言的实现,也没有找到针对单精度计算的实现,我将不胜感激任何类型的提示/链接/示例...

c floating-point precision approximation single-precision

5
推荐指数
1
解决办法
1358
查看次数

Payne Hanek算法在C中的实现

我很难理解如何实现Payne和Hanek发布的范围缩减算法(三角函数的范围缩减)

我见过这个图书馆:http: //www.netlib.org/fdlibm/

但它看起来如此扭曲,我所创立的所有理论解释都太简单了,无法提供实现.

有一些好的......好的...很好的解释吗?

c algorithm floating-point floating-accuracy

3
推荐指数
1
解决办法
1836
查看次数