我正在使用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
答案 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
请参阅网站以获取可下载的资源。