Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;欧几里德距离_C++ - Fatal编程技术网

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;zcout
^
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)是不必要的。两个幂的和总是正的。或者在这个计算中将它作为距离的平方。距离最小的项也将具有最小距离的平方。