Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Java 有人能解释什么是舍入误差吗?_Java_Double_Rounding_Pow_Sqrt - Fatal编程技术网

Java 有人能解释什么是舍入误差吗?

Java 有人能解释什么是舍入误差吗?,java,double,rounding,pow,sqrt,Java,Double,Rounding,Pow,Sqrt,在我的试卷中,它指出:x是一个double类型的正变量,并且(Math.pow(x,0.5)=Math.sqrt(x))由于舍入错误应该为false。然而,我尝试了一些价值观,结果都是正确的。有什么解释吗?问题在于浮点数学是违反直觉的 例如,一个方面是特定的数字不能正确地表示为浮点数 编写0.2,但在运行时,结果显示为0.1999999 因此,处理浮点数时的基本规则是永远不要执行x==y,而是使用epsilon delta,这样(x-y)

在我的试卷中,它指出:x是一个double类型的正变量,并且(Math.pow(x,0.5)=Math.sqrt(x))由于舍入错误应该为false。然而,我尝试了一些价值观,结果都是正确的。有什么解释吗?

问题在于浮点数学是违反直觉的

例如,一个方面是特定的数字不能正确地表示为浮点数

编写0.2,但在运行时,结果显示为0.1999999

因此,处理浮点数时的基本规则是永远不要执行x==y,而是使用epsilon delta,这样(x-y)
换句话说:许多使用浮点数的操作会产生“意外”的结果。因此,一个简单的==是不够的

尝试
x=1.000000000002
Math.pow(x,0.5)=1.000000000001
,但是
Math.sqrt(x)=1.0000000000009999
问题应该说“可能是错误的”而不是“应该是错误的”。有许多值的表达式为真,但有些值的表达式为假。