If语句不工作(Python)

If语句不工作(Python),python,if-statement,floating-accuracy,Python,If Statement,Floating Accuracy,这似乎是非常简单的代码,但由于某些原因,它就是无法工作。我需要在特定时间输出一个值,但if语句似乎没有计算。下面是我尝试做的基本版本 dt=.1 while t<=10: if t==5: print('yes') t+=.1 感谢您的帮助这是因为您的t是浮点数,并且在机器代码中表示的精度不是100%。您需要将其转换为整数,或者更改if条件,以便解决此问题(转换为整数或使用不等式)。这是因为您的t是浮点,在机器代码中表示的精度不是100%。您需要

这似乎是非常简单的代码,但由于某些原因,它就是无法工作。我需要在特定时间输出一个值,但if语句似乎没有计算。下面是我尝试做的基本版本

dt=.1

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

感谢您的帮助

这是因为您的
t
是浮点数,并且在机器代码中表示的精度不是100%。您需要将其转换为整数,或者更改
if
条件,以便解决此问题(转换为整数或使用不等式)。

这是因为您的
t
是浮点,在机器代码中表示的精度不是100%。您需要将其转换为整数,或者更改
if
条件,以便解决此问题(转换为整数或使用不等式)。

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

2) 它们使用二进制内部表示法来表示尾数(基本上是除第一位以外的所有有效数字)

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

4) 因此,相加.1不能保证有完美的结果-四舍五入错误会导致错误。例如,.1自身加十次可能等于1.0000…1或0.999999…9

看看每个计算机科学家都应该知道什么是浮点运算

1)浮点并不是无限精确的——它们占用内存中一定数量的位(通常是64位或32位)

2) 它们使用二进制内部表示法来表示尾数(基本上是除第一位以外的所有有效数字)

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

4) 因此,相加.1不能保证有完美的结果-四舍五入错误会导致错误。例如,.1自身加十次可能等于1.0000…1或0.999999…9

看看每一位计算机科学家都应该知道的关于浮点运算的知识

尝试将t(即浮点)转换成整数,然后进行比较

if int(t) == 5:
   ...

尝试将t(浮点)转换为整数,然后进行比较

if int(t) == 5:
   ...


关于浮点算法不准确的原因有很多评论,但没有关于如何修复代码的答案


长话短说,
而t有很多关于浮点运算不准确的评论,但是没有关于如何修复代码的答案


长话短说,
而一个基于您编写的代码编写的非常糟糕的示例对我来说已经足够好了。
因此,精确控制可能是您所需要的:

从十进制导入*
getcontext().prec=3
dt=.1
t=0

而一个基于您编写的代码编写的非常糟糕的示例对我来说已经足够好了。
因此,精确控制可能是您所需要的:

从十进制导入*
getcontext().prec=3
dt=.1
t=0

每个计算机科学家都应该知道的关于浮点算术的知识每个计算机科学家都应该知道的关于浮点算术的知识我宁愿使用
round
而不是
floor
,因为你不知道错误会朝哪个方向。我宁愿使用
round
而不是
floor
,因为你不知道错误将在哪个方向出现。
if int(t) == 5:
   ...
import math
t_flr = math.floor(t)
if t_flr == 5:
   ...
    from decimal import *
    getcontext().prec = 3

    dt=.1

    t = 0

    while t <= 10:
        if Decimal(t) == 5:
            print('yes')
        t = Decimal(Decimal(t) + Decimal(dt))
        print(t)