预防计算的值类型
Value type preventing calculation?
我正在编写一个课程的程序,该程序简单地计算两个坐标点之间的距离(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而代替负面的可能性,还是double可以做相同的工作?我也将精度设置为8,但我不明白为什么它不会正确计算?
我为这个问题的简单性感到抱歉,我比初学者更多。
您使用的距离公式错误它应该是distance1 = sqrt(squareofx1 squareofy1);代替distance1 = sqrt(squareOfx1 -squareofy1);由于公式错误,如果SquareOFX1小于SquareOfy1,则会出现错误,因为在实际坐标的情况下,不可能使用负数的SQRT。
首先,如@fefe所述,您的公式不正确地将其更改为 distance1 = sqrt(squareofx1 + squareofy1)
。顺便说一句,您的所有计算可以用一行代码表示:
distance1 = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
不需要差异ofofx1 ,差异fightofy1 , squareofx1 , squareofy1 在您的程序中再次在这些变量中。
其次,,双double给您比浮子更精确。如果您需要精确度超过6-7个小数后,则需要双倍的余地也可以使用。阅读有关Float vs double
相关文章:
- 如何计算数据类型的范围,例如int
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 如何在数组类型的模板代码中计算std::size_t
- 错误:一元"*"的类型参数无效(具有"int"):使用 mergesort 计算
- 如何计算浮点数据类型的范围、最大值、最小值
- (类型)(数学表达式)是否计算此类型的表达式?
- 模板专用化中的类型将继续计算?
- 类型检测:使用variadic参数正确实现计算平均值的函数
- 如何计算长长类型变量中的位数
- 计算句子的校验和(XOR)(由不同变量/类型的组合形成)
- 是否有任何数据类型或方法可以计算当前单元格中先前数组单元格的总和
- 只需一个函数即可为不同类型的变量进行相同计算的任何方法
- 在opencv中,使用垫子类型计算马氏距离太慢了。如何提高效率?
- 基本类型变量的赋值计算序列,右操作数引发异常
- 预防计算的值类型
- friend get 函数,返回通过可变参数模板递归计算的类型
- 计算类型范围
- 长数据类型计算-为什么Java比c++快得多
- C++不兼容类型:计算等位基因频率