【发布时间】:2018-06-27 00:11:32
【问题描述】:
如截图所示,
double mag = 0.109981
double radius = 0.002
因此,
if(mag > radius) {
// it's always false?
}
显然应该是正确的,但事实并非如此。 0.109981怎么不大于0.002?
我在这里做错了什么?它给出了架构警告,但我仍然不明白这里发生了什么......
double mag = dVec.magnitude();
double radius = TOOL_TIP_RADIUS;
double diff = mag - radius;
cout << "mag: " << mag << endl << "radius: " << radius << endl << "diff: " << diff << endl << "mag > radius : " << (mag > radius) << endl;
if (mag > radius) {
// no collision
fve == (int) OUTSIDE;
}
【问题讨论】:
-
您说比较不起作用,但没有解释您如何确定它不起作用。你说它“显然应该是真的,但事实并非如此”,但不要说为什么你认为它不是。
-
编译器优化了
fve == (int) OUTSIDE;,因为它什么都不做。 -
无论您在调试器中看到什么,您的程序都能正常工作吗?如果是这样,那么您很可能正在调试优化的构建,其中代码已被移动、删除等。
-
@DavidSchwartz 不是 0.109981 总是大于 0.002 吗?怎么不是?
-
看
mag > radius : 1,可以清楚的看到mag更大(否则显示为0)
标签: c++ c visual-studio double