值类型阻止计算?

时间:2017-09-08 05:07:19

标签: c++

我正在编写一个程序,它只是计算两个坐标点(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,但我不明白为什么它不能正确计算?

我很抱歉问题的简单性,我不仅仅是一个初学者。

2 个答案:

答案 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 等变量在你的程序中再次使用这些变量。

其次Doublefloat更精确。如果在十进制使用后需要精度超过6-7个位置,则其他浮点数也可以。详细了解Float vs Double