标签: c++ floating-point vectorization x86-64 pow
有一种快速的方法可以将2.0带到某个浮点x吗?我的意思是比pow(2.0, x)更快的东西,最好用AVX2很好地矢量化。
2.0
x
pow(2.0, x)
整数的对应部分是1<<n,但它仅适用于整数n。
1<<n
n
答案 0 :(得分:10)
有一个标准std::exp2(double n)
std::exp2(double n)
计算2加注到给定的幂n
2
在特定环境中,exp2(x)可能不会比pow(2.0, x)快,但它比一般pow更具体。
exp2(x)
pow
答案 1 :(得分:2)
对于整数幂,您可以使用std::ldexp:
std::ldexp
double x = std::ldexp(1.0, k); // 2 to the power of k
这比1<<k和铸造要好,因为它不会有中间溢出,也支持负面力量。
1<<k