以下代码是从https://kotlinlang.org/docs/reference/functions.html?q=&p=0我可以比较Kotlin中两个浮点数是否相等吗?
此代码计算余弦的固定点,它是一个数学常数。它只需从1.0开始重复调用Math.cos,直到结果不再变化,结果为0.7390851332151607。
在我看来,我们无法比较两个浮点数是否相等,所以我认为if (x == y)
的结果总是假的吧?
private fun findFixPoint(): Double {
var x = 1.0
while (true) {
val y = Math.cos(x)
if (x == y) return y
x = y
}
}
如果你愿意,你可以比较两个浮点数,为什么你不能?这不是一种常见的情况,因为它是针对大多数问题的一种脆弱解决方案。你通常想要做的是比较一个差异的ε值或使用精确的十进制算术。在这种情况下,它看起来像一个有效的解决方案,因为它必然收敛到一定的值。 – DPM
在某些语言中,比如Fortran,浮点数不是一个精确的,所以如果(x == y)返回y应该是if(ABS(x-y)<0.0000000001)返回y – HelloCW