C ++双重比较的行为很怪异

时间:2018-06-27 00:11:33

标签: c++ c visual-studio double

简单的双值比较无法正常工作。 enter image description here

enter image description here

如屏幕截图所示,

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;
}

1 个答案:

答案 0 :(得分:0)

如果您假设这行:

fve == (int) OUTSIDE;

什么也不做,因为没有将fve设置为OUTSIDE,这是因为您没有 fve设置为OUTSIDE

您正在比较fveOUTSIDE的相等性,然后丢弃结果。

我怀疑你应该写过(写着一个 =):

fve = (int) OUTSIDE;