3

私がscalaインタープリター内の値をチェックしているとき:

scala> 1==1.0000000000000001

res1: Boolean = true

scala> 1==1.000000000000001

res2: Boolean = false

ここでは、「scalaコンパイラがこれらを整数または浮動小数点またはdouble(および比較)としてどのように解釈するか」に関連する明確な見解が得られていません。

4

1 に答える 1

9

これは実際にはScalaに関連するものではなく、浮動小数点演算の問題です。まず第一に、それと比較するIntと(常に安全)DoubleにキャストさIntれます。Double2番目のケースは明らかです-値は異なります。

最初のケースで発生するのは、Doubletypeが有効数字をそれほど多く格納できないため(この場合は17、64ビット浮動小数点は最大16桁の10進数を格納できる)、値をに丸めます1。そして1 == 1

于 2012-04-07T20:41:15.587 に答える