为什么真的陈述是假的

Why true statement false?

本文关键字:陈述 真的 为什么      更新时间:2023-10-16

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

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

现在我想比较两个数字,一个v.y=4来自v=(5.41,4),另一个min.y=4来自min=(4,4)。当我比较两个相等的数字时,这只是一个奇怪的情况,其他情况都正确执行。我在(4>=4)(v.y>=min.y)上总是出错。有什么问题吗?

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

显然(您没有给出一个可重复的例子),您正在将浮点数与==进行比较。

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

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

在过去,遇到这个问题的初学者通常被称为“每个科学家都应该知道的关于浮点数的知识";(或大约,易错记忆中的标题)。

在过去的几年里,我因为提供这种参考而受到批评,因为据称,真正的技术性东西对今天的学生来说太难了。人们提出了更容易消化的替代方案,有点像维基百科的简单版。然而,我一个都不记得了。