Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Floating point 是不是;0.00x<;=0.001*x“;总是保持双倍?_Floating Point_Double_Ieee 754 - Fatal编程技术网

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.0x
0.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不是询问等式是否成立,他们知道不成立。他们在问它是否总是相等或更小,或者有时会更大。