Visual Studio 2012中的立方根函数cbrt()

时间:2014-02-13 14:42:23

标签: c++ visual-studio-2012 root cubic

我正在使用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中不可用,我很难想象,所以我的问题:

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

亲切的问候,

Ernst Jan

1 个答案:

答案 0 :(得分:4)

This site探索了几种在C中有效计算多维数据集根的计算方法,并提供了一些可以下载的源代码。

编辑:谷歌搜索“fast cube root”会出现几个看起来很有前途的点击。)

  

多维数据集根是一个值得关注的主题,因为它们被用于许多常见公式中,并且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

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