python - If 语句不起作用 (Python)

标签 python if-statement floating-accuracy

这似乎是非常简单的代码,但由于某些原因,它就是行不通。我需要在某些时候输出一个值,但 if 语句似乎没有评估。以下是我正在尝试做的基本版本。

dt=.1

while t<=10:
     if t==5:
          print('yes')
     t+=.1

我真的在我的代码中尝试过这个,我什至让它在每个时间步都打印 t 但它不会打印"is"。我的代码中还有其他 if 语句,如

if 10<=t<60:
     do stuff

并且这些 if 语句运行完美。我已经尝试过 t==5.0t==float(5) 以防万一它需要它,但它也没有用。这让我发疯,所以如果有人可以帮助我,那就太好了。我在 Ubuntu 12.4 上的 Spyder 中运行它,我收到一条消息说 import sitecustomize 失败。这会和它有什么关系吗?我已经使用该消息运行代码一段时间了,之前没有引起任何问题。

编辑

得到它的工作,我用过

if int(t)==5 and t<5+dt:

感谢帮助

最佳答案

1) float 没有无限的精度 - 它们在内存中占用一定数量的位(通常是 64 位或 32 位)。

2) 他们对尾数使用二进制内部表示(基本上,除了第一位之外的所有有效数字)。

3) .1 不能精确地存储为二进制表示 - 只能作为二进制位的无限重复模式,并且由于尾数非常大, float 实际上是 .1 的近似值,而不是 .1。 1. (但是,0.5 和 0.25 之类的东西可以)

4) 因此,相加 .1s 并不能保证得到完美的结果——错误的舍入方式会导致错误。例如,.1 与自身相加十次可能会得到 1.0000...1 或 0.999999...9。

参见 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html每个计算机科学家都应该了解的浮点运算知识

关于python - If 语句不起作用 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941235/

相关文章:

Python Regex 匹配和排除某些内容

python - 如何从python中的文件中读取多个词典?

python - 在 python 3.6 中定义函数并期望 True 或 False 但返回 None

c++ - 如何提高浮点二阶导数计算的精度?

c++ - 替代 C++11 的 std::nextafter 和 std::nexttoward for C++03?

c - 是否可以使用 gcc 提高浮点算术的准确性?

python - Pandas -填充nans直到第一个非NULL值

python - pyinstaller exe黑屏

for-loop - 如何在 gwbasic 中编写将 1 到 100 的自然数相加的程序?

javascript - 为什么我的程序无论用户输入如何总是打印第一个条件?