我正在编写一个程序,它只是计算两个坐标点(x,y)之间的距离。
differenceofx1 = x1 - x2;
differenceofy1 = y1 - y2;
squareofx1 = differenceofx1 * differenceofx1;
squareofy1 = differenceofy1 * differenceofy1;
distance1 = sqrt(squareofx1 - squareofy1);
当我计算距离时,它有效。然而,有一些情况,例如结果是非方数的平方根,或者由于输入顺序x1和x2 / y1和y2的差是负的,它只是在距离时给出0.00000的距离显然大于0.我对所有变量使用double,我应该使用float代替负面可能性还是双倍做同样的工作?我也将精度设置为8,但我不明白为什么它不能正确计算?
我很抱歉问题的简单性,我不仅仅是一个初学者。
答案 0 :(得分:0)
您正在使用距离公式错误 它应该是 distance1 = sqrt(squareofx1 + squareofy1); 代替 distance1 = sqrt(squareofx1 - squareofy1); 由于错误的公式,如果squareofx1小于squareofy1,则会出现错误,因为在真实坐标的情况下,无法使用负数的sqrt。
答案 1 :(得分:0)
首先,您的公式不正确,将其更改为distance1 = sqrt(squareofx1 + squareofy1)
,如@fefe所述。顺便说一下你所有的计算都可以用一行代码表示:
distance1 = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
除非您使用存储的结果,否则不需要 differenceofx1 , differenceofy1 , squareofx1 , squareofy1 等变量在你的程序中再次使用这些变量。
其次,Double比float更精确。如果在十进制使用后需要精度超过6-7个位置,则其他浮点数也可以。详细了解Float vs Double