Are*_*res 7 c# vb.net math square-root operator-keyword
我被许多程序员警告不要使用平方根功能,而是将数字提升到半功率.我的问题是双重的:
这样做的感知/真实表现有什么好处?为什么它更快?
如果它真的更快,为什么平方根函数甚至存在?
Dmi*_*nko 15
我做了一个简单的测试:
Stopwatch sw = new Stopwatch();
sw.Start();
Double s = 0.0;
// compute 1e8 times either Sqrt(x) or its emulation as Pow(x, 0.5)
for (Double d = 0; d < 1e8; d += 1)
// s += Math.Sqrt(d); // <- uncomment it to test Sqrt
s += Math.Pow(d, 0.5); // <- uncomment it to test Pow
sw.Stop();
Console.Out.Write(sw.ElapsedMilliseconds);
Run Code Online (Sandbox Code Playgroud)
我的工作站(x64)的(平均)结果是
Sqrt: 950 ms
Pow: 5500 ms
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,比其仿真速度快Sqrt(x) 5.5倍.所以它只是另一个传奇(至少在C#中),那个慢的人应该更喜欢替换Pow(x, 0.5)SqrtPow
您必须了解每个函数如何实现以回答问题.
平方根函数使用牛顿方法迭代计算平方根.它以二次方式收敛.什么都不会加快速度.
其他函数exp()和ln(x)具有自己的收敛/复杂性问题的实现.例如,可以将两者都实现为序列和.需要一定数量的术语才能保持足够的准确性.
如果这些功能碰巧在本机代码中实现,那么所有的赌注都会被取消.那些可能比你写的任何东西都要快.
了解这些将让您做出明智的决定.我不会信仰它,因为那些程序员"知道"答案.
除非你正在进行密集的数字工作,否则我会说这个选择不会影响你的整体计划表现.除非你正在进行严肃的大规模科学编程,否则最好避免微观优化.