C++ c++;欧几里德距离
此代码编译并运行,但未输出正确的距离C++ c++;欧几里德距离,c++,C++,此代码编译并运行,但未输出正确的距离 for (int z = 0; z < spaces_x; z++) { double dist=( ( (spaces[z][0]-x)^2) + ( (spaces[z][1]-y)^2) ); dist = abs(dist); dist = sqrt(dist); cout << "for x " << spaces[z][0] << " for
for (int z = 0; z < spaces_x; z++)
{
double dist=( ( (spaces[z][0]-x)^2) + ( (spaces[z][1]-y)^2) );
dist = abs(dist);
dist = sqrt(dist);
cout << "for x " << spaces[z][0] <<
" for y " << spaces[z][1] <<
" dist is "<< dist << endl;
if (dist < min_dist)
{
min_dist = dist;
index = z;
}
}
for(intz=0;z cout^
是xor
运算符;它不执行幂运算
在一般情况下,如果你想把某个东西提升到一个幂,你应该使用<代码> STD::POW/COD>函数。但是,在这个特定的情况下,因为它是正方形,所以最好使用乘法(例如,<代码> x*x< /代码>,而不是<代码>:ST::POW(x,2)< />代码> .< /P> < P>注意,在C++中插入符号(<代码> ^ < /代码>)不是求幂运算符。相反,它是位异或。语法^2
并不意味着提升到2的幂-它意味着XOR。请使用x*x
double dx = spaces[z][0] - x;
double dy = spaces[z][1] - y;
double dist2 = dx * dx + dy * dy;
使用hypot()
可能是一个更好的主意,而不是手动平方、相加并取平方根。hypot()
解决了一些天真的方法会失去精度的情况。它是C99和C++0x的一部分,对于没有它的编译器来说,总是存在的。请随意在这里添加一个问题。我没有看到问题。不过,请快速查看代码,abs(dist)这是毫无意义的,因为你要加两个平方数。我不知道为什么有人投票关闭这个。问的问题很明显。我编辑了这个问题,让它更清楚。它被称为“插入符号”不是胡萝卜:)它是按位异或,不是或。哇,一篇文章中有两个粗心的错误。抱歉,修复了。如果你用整数来表示幂,std::pow将使用一个快捷方式。我见过至少两个pow实现非常差,没有做任何这样的优化。一般来说,不要指望它。+1。另外,dist=abs(dist)是不必要的。两个幂的和总是正的。或者在这个计算中将它作为距离的平方。距离最小的项也将具有最小距离的平方。