gpt4 book ai didi

kotlin - 我可以比较 Kotlin 中的两个 float 是否相等吗?

转载 作者:IT老高 更新时间:2023-10-28 13:45:24 24 4
gpt4 key购买 nike

以下代码来自https://kotlinlang.org/docs/reference/functions.html?q=&p=0

此代码计算余弦的固定点,余弦是一个数学常数。它只是从 1.0 开始重复调用 Math.cos,直到结果不再变化,产生 0.7390851332151607 的结果。

在我看来,我们无法比较两个 float 是否相等,所以我认为 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
}
}

最佳答案

为了进一步扩展我的评论并更加准确,文档为您提供了关键。

Math.cos(double)

The computed result must be within 1 ulp of the exact result. Results must be semi-monotonic.

ulp 是编码的 float 与可在数据类型中编码的下一个数字之间的差,在本例中为 double 。

如果结果必须在 1 ulp 以内,这意味着结果最多可以是两个浮点值之一。

因此,计算不会停止的唯一方法是输入其中一个数字会给您另一个数字。但是由于该函数是半单调的,这意味着这不可能发生。否则,您将两者中较高的值作为输入,将较低的值作为输出,较低的值将较高的值作为输出。半单调的意思是它只向一个方向前进(简单地说,有点不准确)。

关于kotlin - 我可以比较 Kotlin 中的两个 float 是否相等吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com