我需要日志功能的开源(无许可证限制)实现,有签名的东西
__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/