c++ - SSE2 : Double precision log function

标签 c++ c optimization sse simd

我需要日志功能的开源(无许可证限制)实现,有签名的东西

__m128d _mm_log_pd(__m128d);

它在英特尔短 vector 数学库(ICC 的一部分)中可用,但 ICC 既不是免费的也不是开源的。我正在寻找仅使用内部函数的实现。

它应该使用特殊的有理函数逼近。我需要一些几乎与 cmath 日志一样准确的东西,比如 9-10 位十进制数字,但速度更快。

最佳答案

我相信 log2 更容易计算。您可以将您的数字乘以/除以 2 的幂(非常快),使其位于 (0.5, 2],然后您使用 Pade approximant(取 M 接近 N),这很容易一次又一次地得出all,并且你可以根据你的需要选择它的顺序。你只需要你可以用SSE intrinsics做的算术运算。不要忘记根据上面的比例因子添加/删除一个常量。

如果你想要自然对数,除以 log2(e),你可以一劳永逸地计算。

在一些具体的项目中,自定义日志功能的情况并不少见。标准库函数解决了一般情况,但您需要更具体的东西。我真诚地认为自己做起来并不难。

关于c++ - SSE2 : Double precision log function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4431505/

相关文章:

c++ - 分配给转换运算符失败 - C++

c++ - 从 float 组创建缓冲区

c++ - 姐妹类代表团

c - 如何根据扩展名动态获取文件名?

c - Round Robin C 调度模拟器

multithreading - 单线程 Windows 程序的最佳 AWS EC2 实例类型

c++ - 使用 .png 文件的动画 cocos2dx

c - 在 Linux 中从整个屏幕检测鼠标事件

算法人员排类解决方案

c++ - 避免使用 vector 的 vector 进行复制