运算符 >= 在实际为 true 时返回 false。
Operator >= returns false when it actually true
我正在尝试比较两个坐标。我发现我的循环永远不会因为这个而停止:
exit = ((p.x * sign_x) >= end_pos.x) && ((p.y * sign_y) >= end_pos.y);
cout<< p.x * sign_x << " >= " << end_pos.x
<< "=" << std::boolalpha << ((p.x * sign_x) >= end_pos.x)
<< " "
<< p.y * sign_y << " >= "<< end_pos.y
<< "=" << std::boolalpha << ((p.y * sign_y) >= end_pos.y)<<endl;
exit
变量永远不会变成true
。在控制台中,我看到:
9435.6 >= 132.6=true 180 >= 180=false
怎么可能?
所有变量都float
。值写在上面。以180
为值的变量永远不会改变。
您没有提供 p.y
和 sign_y
的示例值,因此很难确定。
但问题几乎可以肯定的是,p.y * sign_y
并不完全等于180
;但是当你打印它时,它会四舍五入。
我怀疑如果你打印的值是(p.y * sign_y) - end_pos.y
,结果不会0
。
180>= 180=假
这是一个标准的浮点精度问题。 使用调试器时应该会看到它,实际值可能类似于 179.9999。 你这样解决它:
bool closeEnough = p.y * sign_y - end_pos.y >= -epsilon;
其中 epsilon 是一个小值,它足够大,可以吸收浮点计算误差。 浮点型只有 6 位有效数字,因此值约为 180.0,epsilon 应至少为 0.001f。 如果这还不够好,那么您需要使用双精度而不是浮点数,它有 15 位有效数字。
相关文章:
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- C++如果使用 lambda 表达式的语句返回 true,但输出来自 false,为什么
- 测试用例状态为失败,但返回的值为 true
- MFC 的 OnInit() 函数中的返回 true 和返回 false 有什么区别
- 我正在尝试创建一个布尔函数,该函数计算字符并在字符为"()*-+"时返回 true
- 创建一个函数,如果元素在unordered_set中,则返回 true,如何处理模板
- QTimer isActive 返回 true,但 remainingTime 返回 -1
- 为什么在 IsValid(Object) 返回 true 后不能安全地使用 Object?
- 计算 <Classtype*> 向量中所有项的布尔值的最有效方法,如果全部为真则返回 true
- QDir mkpath 返回 true,但未创建目录
- std::is_array 当它应该返回 false 时返回 true
- 尝试创建一个评估字符的bool函数,如果字母数字为字母,则返回true
- 我想返回 True/False 关于值是否在一组值中
- 为什么我的布尔函数返回 true 会导致读取访问冲突?
- ifstream::is_open 返回 true,即使该位置不存在文件也是如此
- 是否有内置函数返回" the number of true value in a boolean vector "?
- 为什么包含指针的条件总是返回 true?
- 对于 ((无符号整数)0-1)返回 true>0
- 为什么#ifndef __func__返回true
- 我的bool函数一直返回true,我不知道为什么