双常量的java比较
我对此进行了大量的研究,我对双打中的精确误差有所了解;但是我找不到答案。我的问题是:比较双常数是否总是安全的?我的意思是,从字符串中读取double或在源代码中创建double。不会对其进行任何操作(加法、减法等)。如果我创建一个变量,比如
双c=3.0
下列等式是否总是正确的?c==3.0000
例如,是否有可能看到像这样的方程式的错误计算1.23456789<;1.23456788?
你可以在下面搜索框中键入要查询的问题!
我对此进行了大量的研究,我对双打中的精确误差有所了解;但是我找不到答案。我的问题是:比较双常数是否总是安全的?我的意思是,从字符串中读取double或在源代码中创建double。不会对其进行任何操作(加法、减法等)。如果我创建一个变量,比如
双c=3.0
下列等式是否总是正确的?c==3.0000
例如,是否有可能看到像这样的方程式的错误计算1.23456789<;1.23456788?
# 1 楼答案
它总是安全的;有一个警告
下面是一个例子:
这是真的;所有双精度常数都会自动四舍五入到最接近的可表示双精度,对于这两个数字,它都是相同的双精度
因此,给定两个实际的数学数A和B,其中
A < B
,然后如果将这些数字转换为双文本,并在其上运行这3个表达式,则会出现以下情况:如果A和B四舍五入到不同的双精度,您将得到保证:
A < B
将是真的A == B
将为假A > B
将是错误的如果A和B非常接近,它们可能会变成同一个双精度,你会得到:
A < B
将为假A == B
将是真的A > B
将是错误的换句话说,“小于”和“大于”可以弯曲成相等,但较小的数字永远不会被错误地视为较大
# 2 楼答案
是的,这是可能的,因为您可以编写任意位数的浮点文本,当编译器解释它们时,它们将被近似为适合
double
的最接近值例如:
打印
false
,即使在数学上第一个数字大于第二个数字(因此您希望它打印true
)总之:通过使用浮点文字值,您不会突然拥有任意精度的浮点数