use*_*756 5 python floating-point comparison if-statement
可能重复:
为什么十进制数不能用二进制表示?
程序不输入if语句
所以我试图运行一个有两个变量的程序,当一个变量等于另一个变量时,它会执行一个函数.在这种情况下,打印垃圾邮件.但是,出于某种原因,当我运行这个程序时,即使我知道它们是相同的,我也没有得到任何输出.
g=0.0
b=3.0
while g < 30.0:
if g==b:
print "Hi"
g+=.1
print g, b
Run Code Online (Sandbox Code Playgroud)
您假设将.1足够的时间添加到0.0将产生3.0.这些是浮点数,它们是不准确的.舍入错误使得该值永远不会完全等于3.0.您几乎不应该使用==测试浮点数.
执行此操作的一种好方法是使用整数值进行计数(例如,将i从0到300的循环减1)并仅在使用浮点值时缩放计数器(例如,设置f = i*.1).当你这样做时,循环计数器总是精确的,所以你得到你想要的精确迭代,并且只有一个浮点舍入,它不会从迭代到迭代累积.
循环计数器通常是整数类型,因此很容易看出加法是精确的(直到达到溢出).但是,循环计数器也可以是浮点类型,前提是您确定它的值和操作是精确的.(常见的32位浮点格式表示从-2 24到+2 24的整数.除此之外,它没有准确表示整数的精度.它并不完全代表.1所以你不能用增量来计算.1.但你可以用.5,.25,.375的增量或其他两个中等幂的倍数来计算.