【发布时间】:2016-12-05 11:40:53
【问题描述】:
对于我的一个项目,我需要对pow(x,y) 进行非常快速的计算。希望它被限制在一个精确的领域,但它也需要足够的内存效率,如果它不够快的话。
就像我说的,它在 x 介于 0 和 1 之间,y 介于 1 和 2 之间的短范围内。因此,它必须在整个范围上足够精确,以便在递归调用时(和不要在一个数字上拖延)
如果你们遇到这样的事情或有建议......
【问题讨论】:
-
@Mehrdad 已编辑
-
exp(y*log(x))速度太慢怎么办? ——你认为什么精度是足够的? -- 试试x^y = x*(1+(x-1))^(y-1) = x*(1+(y-1)*(x-1)+(y-1)*(y-2)/2*(x-1)^2 + O(x-1)^3作为近似值。 -
如果有人想出比 C++ 库中
pow()的本机实现更好的东西,我会感到惊讶,这可能会使用本机 FPU 指令进行计算。 -
@SamVarshavchik :如果您查看像 cise.ufl.edu/~cop4600/cgi-bin/lxr/http/source.cgi/lib/math/… 或 github.com/evanphx/ulysses-libc/blob/master/src/math/pow.c 这样的 pow 的 libc 实现的实际来源,您会感到惊讶。
-
@SamVarshavchik :我的意思是,这取决于您使用“更好”解决的质量问题。通常的实现力求获得最精确的结果,因此可以通过牺牲一些准确性来获得一些速度。
标签: c++ c++11 math optimization