Floating point 是不是;0.00x<;=0.001*x“;总是保持双倍?
例如:Floating point 是不是;0.00x<;=0.001*x“;总是保持双倍?,floating-point,double,ieee-754,Floating Point,Double,Ieee 754,例如: 0.008 == 0.001 * 8 0.009 < 0.001 * 9 0.035 == 0.001 * 35 0.036 < 0.001 * 36 0.008==0.001*8 0.009 < 0.001 * 9 0.035 == 0.001 * 35 0.036 < 0.001 * 36 我还测试了以下模式: 0.0x <= 0.01 * x 0.000x <= 0.0001 * x 0.0x0.000005这不是你所要求的,因为0.0
0.008 == 0.001 * 8
0.009 < 0.001 * 9
0.035 == 0.001 * 35
0.036 < 0.001 * 36
0.008==0.001*8
0.009 < 0.001 * 9
0.035 == 0.001 * 35
0.036 < 0.001 * 36
我还测试了以下模式:
0.0x <= 0.01 * x
0.000x <= 0.0001 * x
0.0x0.000005这不是你所要求的,因为0.00x
不是一个数学运算。但也许有兴趣考虑以下相关问题:
当x
是IEEE754双精度数字时,x/100==0.01*x
是真的吗
即使忽略了NaN
这一明显的例子,这种平等也是不正确的。也就是说:
Prelude> 0.9033208460939007 / 100
9.033208460939007e-3
Prelude> 0.9033208460939007 * 0.01
9.033208460939008e-3
(我使用了Haskell/ghci提示符,但您可以在任何执行IEEE754二进制浮点运算的语言中复制它,这几乎是所有语言都有的。)
请注意最后一位的结果是如何不同的
不用说,由于舍入和有限的精度,几乎没有“明显”的相等性适用于浮点数。从某种意义上说,这是故意的;浮点数是一种表示“实数”的方法,具有足够好的有限存储空间,但不应用于代数运算:例如,+
,*
等的关联性是一种经典情况,它不适用于浮点数,但你可以从任何“数学”中得到它数字的概念。显然,对于任意零,它是错误的,因为浮点类型没有无限精度。输入足够的零和0.000….01*x将导致0您是否更改了舍入模式?OP不是询问等式是否成立,他们知道不成立。他们在问它是否总是相等或更小,或者有时会更大。