3

我正在用 C/C++ 在 Visual Studio 2012 Professional (Windows) 中编写一个程序,其中包括使用pow(). 我运行分析器以找出为什么需要这么长时间才能运行,我发现这pow()是瓶颈。

我已经重写了诸如

pow(x,1.5)x*sqrt(x)

pow(x,1.75)sqrt(x*x*x*sqrt(x))

这显着提高了程序的速度。

一些权力是这样的,pow(x,1.0/3.0)所以我寻找立方根函数cbrt()来加快速度,但它似乎在 Visual Studio 中不可用,我几乎无法想象,所以我的问题是:

我在哪里可以找到cbrt()Visual Studio 2012 Professional 中的功能,如果没有,除了 之外还有哪些替代方法pow(x,1.0/3.0)

亲切的问候,

恩斯特·简

4

1 回答 1

4

该站点探索了几种在 C 中有效计算立方根的计算方法,并提供了一些可以下载的源代码。

编辑:谷歌搜索“快速立方根”得到了几个更有希望的命中。)

立方根是一个有趣的话题,因为它们用于许多常见的公式中,并且 Microsoft Visual Studio 中不包含快速立方根函数。

在没有特殊立方根函数的情况下,典型的策略是通过幂函数计算(例如,pow(x, 1.0/3.0))。当未正确处理负数时,这在速度和准确性方面可能存在问题。

他的网站对所使用的方法有一些基准。它们都比pow().

32-bit float tests
----------------------------------------
cbrt_5f      8.8 ms    5 mbp   6.223 abp
pow        144.5 ms   23 mbp  23.000 abp
halley x 1  31.8 ms   15 mbp  18.961 abp
halley x 2  59.0 ms   23 mbp  23.000 abp
newton x 1  23.4 ms   10 mbp  12.525 abp
newton x 2  48.9 ms   20 mbp  22.764 abp
newton x 3  72.0 ms   23 mbp  23.000 abp
newton x 4  89.6 ms   23 mbp  23.000 abp

请参阅网站以获取可下载的源代码。

于 2014-02-13T14:50:13.090 回答