我做了一些测试C++
hypot()
and Java
Math.hypot
。它们似乎都比sqrt(a*a + b*b)
。是因为精度更高吗?斜边的计算方法是什么hypot
函数用途?令人惊讶的是,我在文档中找不到任何性能不佳的迹象。
这不是一个简单的 sqrt 函数。您应该检查此链接以了解该算法的实现:http://www.koders.com/c/fid7D3C8841ADC384A5F8DE0D081C88331E3909BF3A.aspx
它有 while 循环来检查收敛性
/* Slower but safer algorithm due to Moler and Morrison. Never
produces any intermediate result greater than roughly the
larger of X and Y. Should converge to machine-precision
accuracy in 3 iterations. */
double r = ratio*ratio, t, s, p = abig, q = asmall;
do {
t = 4. + r;
if (t == 4.)
break;
s = r / t;
p += 2. * s * p;
q *= s;
r = (q / p) * (q / p);
} while (1);
编辑(J.M 更新):
Here是原始的 Moler-Morrison 论文,并且here由于杜布鲁勒,这是一个很好的后续行动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)