【发布时间】:2016-02-06 02:03:32
【问题描述】:
这可能看起来很傻。但我是 python 新手,喜欢在我的程序中使用相等条件,并且遇到了一个非常令人惊讶的路障。虽然这里的实际问题是最后一个条件r==rmax 不满足,我会错过循环的迭代,但这并不是我担心的。
除了(微不足道的)解决方法之外,有人可以向我解释 简单来说发生了什么吗? (还有为什么无论我运行这个循环多少次,数字都一样,因此它是系统性的,而不是概率性的)。 以及确保不会发生这种情况的正确方法(我的意思是正确的意思是我应该在我的所有编码中采用一种编程实践,这样这种无意的差异就不会再发生)?我的意思是这样的循环是在我的代码中无处不在,这让我很担心。
似乎我不能相信 python 中的数字,这将使它作为计算工具毫无用处。 PS:我正在使用 Numpy 进行科学计算项目。
>>> while r<=r_max:
... print repr(r)
... r = r + r_step
...
2.4
2.5
2.6
2.7
2.8000000000000003
2.9000000000000004
3.0000000000000004
3.1000000000000005
3.2000000000000006
3.3000000000000007
3.400000000000001
3.500000000000001
3.600000000000001
3.700000000000001
3.800000000000001
3.9000000000000012
【问题讨论】:
-
这主要是浮点运算的陷阱,在我看来不是 python。
-
是的,浮动算术问题。但是在我年轻的时候,当我用 C++ 编程时,我经常在这样的循环中使用这样的条件,我从来没有遇到过这样的问题。我的意思是,这意味着,我以前(和将来)python 程序中的简单条件语句可能是错误的,因此会错过一些重要的迭代。在科学计算中,你不想犯这样的错误。
-
我认为这与浮动的实际实现方式有关(在您年轻的时候,现在,浮动的处理方式可能会有所不同)。恕我直言,循环应该用 floating-point-gui.de/basic.
-
是的,避免相等条件将是一个很好的实践。非常感谢 Pierre G。如何将您的评论标记为有帮助?
标签: python numpy while-loop floating-point conditional