什么是朋友之间的Int.MaxValue?

MiP*_*MiP 7 jvm scala language-design

Scala中int,float和long的最大值为:

Int.MaxValue = 2147483647

Float.MaxValue = 3.4028235E38

Long.MaxValue = 9223372036854775807L

来自Scala编译器的作者,Keynote,PNW Scala 2013,幻灯片16 What's Int.MaxValue between friends?:

val x1: Float = Long.MaxValue
val x2: Float = Long.MaxValue - Int.MaxValue
println (x1 == x2)

// NO WONDER NOTHING WORKS
Run Code Online (Sandbox Code Playgroud)

为什么这个表达式会返回true

Mik*_*len 12

A Float是4字节浮点值.同时a Long是8字节值,Int也是4字节值.但是,数字以4字节浮点值存储的方式意味着它们只有大约8位精度.因此,无论最少4个有效字节(另外9-10个数字)的值如何,它们都不具有存储长度的4个最高有效字节(大约9-10个数字)的能力.

因此,Float两个表达式的表示是相同的,因为不同的位低于a的分辨率Float.因此,这两个值相等.

  • 给写一个答案的+1,避免每一个回答"浮点运算糟透了!"的冲动!我们都想. (3认同)