为什么真正的陈述是错

时间:2017-01-14 09:18:22

标签: c++ if-statement vector

我有一个类,矢量,它继承自"原始矢量"

struct vector2raw {
    real_t x, y;
};
struct vector2 : public vector2raw {
    vector2() { null(); }
    vector2(real_t x, real_t y) { this->x = x; this->y = y; }
    vector2(const vector2 &v) { x = v.x; y = v.y; }
and so on

现在我要比较两个数字,一个vy = 4来自v =(5.41,4),另一个min.y = 4来自min =(4,4)。这只是我比较两个相等的奇怪情况数字,其他情况正确执行。我总是假(4> = 4)(v.y> = min.y)。可能是什么问题?

real_t被定义为加倍 UPD:这是用C ++编写的

1 个答案:

答案 0 :(得分:1)

显然(您没有提供可重现的示例)您将浮点数与==进行比较。

除非这些数字恰好是整数值,否则这是一个不可思议的想法,对于初学者来说,这通常是一个不好的想法。

两个浮点值可能看起来相等,例如当你不要求提供额外的小数时,它们给出相同的表示,而实际上它们在一些非常微不足道的数字上有所不同。

在过去,遇到这个问题的初学者过去常常被称为“每个科学家应该知道的关于浮点数的信息”(或者左边是错误记忆的标题)。

在过去的几年里,我因为提供这个参考而受到批评,因为据说对于今天的学生来说,真正的技术等等太难了。人们提出了更容易理解的替代方案,有点像维基百科的简单版本。但是,我不记得其中任何一个。