gpt4 book ai didi

scala - 为什么 Long.MaxValue 适合 Double 但 < Long.MaxValue 不适合

转载 作者:行者123 更新时间:2023-12-02 20:59:43 25 4
gpt4 key购买 nike

我知道这个问题有一个简单的答案,但它让我感到困惑。

为什么 Long.MaxValue 可以存储在 Double 中并作为 longValue 返回,但较小的 Long 会丢失精度。

我预计 53 位之后会出现精度损失?这是怎么回事

scala> val x:Double = Long.MaxValue  // x: Double = 9.223372036854776E18    (9223372036854775807)
scala> x == Long.MaxValue // Boolean = true
scala> x.longValue == Long.MaxValue // Boolean = true
scala> val y = 1234567890123456789L // y: Long = 1234567890123456789 // less than Long.MaxValue
scala> y < x // Boolean = true
scala> val z:Double = y // z: Double = 1.23456789012345677E18
scala> z == y // Boolean = true
scala> z.longValue == y // Boolean = false // why ? MaxValue fits in the Double
scala> z.longValue // 1234567890123456768 <-- loss of 21

最佳答案

这不是“适合”的问题。 double 只是inherently inexact 。有些值将被准确表示,有些则不会。看来您找到了一个可以(您的x)和一个不能(y)的。

这并不特定于您选择的值。以下是类似的行为,具有较小的值,显然“适合” double :

val a = 1.1        // a: Double = 1.1
a == 1.1 // true

val b = 2.2 // b: Double = 2.2
b == 2.2 // true

val c = 1.1 + 2.2 // c: Double = 3.3000000000000003
c == 3.3 // false

关于scala - 为什么 Long.MaxValue 适合 Double 但 < Long.MaxValue 不适合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28731774/

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