Floating point 浮点数运算
几天前,我们在课堂上讨论了浮点数。所以在一些编程语言中有一个表达式需要检查:Floating point 浮点数运算,floating-point,precision,Floating Point,Precision,几天前,我们在课堂上讨论了浮点数。所以在一些编程语言中有一个表达式需要检查: 0.1 + 0.2 == 0.3 返回的为false。但是尝试 100*0.1 + 100*0.2 == 100*0.3 返回真 所以,实际上我知道的是,0.1不能精确表示(0.0001100110011…),这里出现了一些错误。但为什么第二个表达是正确的呢?为什么与100相乘有效 还有一个很好的问题,为什么这个表达式不是0?手术有诀窍吗 >>> math.exp(6)/10 - math.ex
0.1 + 0.2 == 0.3
返回的为false。但是尝试
100*0.1 + 100*0.2 == 100*0.3
返回真
所以,实际上我知道的是,0.1不能精确表示(0.0001100110011…),这里出现了一些错误。但为什么第二个表达是正确的呢?为什么与100相乘有效
还有一个很好的问题,为什么这个表达式不是0?手术有诀窍吗
>>> math.exp(6)/10 - math.exp(6)*0.1
-7.105427357601002e-15
例如,大多数编程语言中使用的双精度浮点数字集大致上是+/-m*2^k的数字集,其中m是从2^52到2^53的整数,k是从-1024到+1024的整数。像0.1这样的数字不在该集合中。任何整数乘以或除以二的幂永远不等于0.1 任何浮点计算都会计算精确的结果,然后将其四舍五入到最接近的浮点数 将0.1+0.2与0.3进行比较时,实际上是取最接近0.1的浮点数和最接近0.2的浮点数,相加,将结果四舍五入到最接近的浮点数,然后与最接近0.3的浮点数进行比较 这两个结果将非常接近。它们是否相等,或者一个结果较小还是另一个结果较小,或多或少都是巧合。如果对100*0.1、100*0.2和100*0.3执行相同的操作,则会发生相同的情况。你会得到两个非常接近的数字,它们是相等的,还是一个或另一个更小,这或多或少是巧合
在上一个问题中,第一个表达式除以10。第二个数乘以最接近0.1的浮点数。没有等于0.1的浮点数,最近的浮点数略大于或小于0.1。因此,结果将非常接近(它们是),但不能保证它们是相同的 @HristoYankov:这似乎很无知。请阅读一篇不需要重复的摘要,以及进一步文档的链接