double
とlong
という2つの変数yとzを持っています。私の問題は、以下のコードスニペットで見られるように不等な値を持っていても、等価演算子がtrueを返すことです。等価演算子は等しくない値に対して真を返します
public class Test {
public static void main(String[] args) throws Exception {
double y = (double) Long.MAX_VALUE;
System.out.println(y);//9.223372036854776E18
long z = Long.MAX_VALUE - 1;
System.out.println(z);//9223372036854775806
System.out.println(y == z);//=============true
}
}
zはyよりも1つの少ない値を持っている場合私のクエリは、なぜY == zは真に来てさ。
この動作を説明できる人がいますか。
もたらし、それらの値を印刷しようとしました:
あなたが
Math.nextDown
を使用して、異なる浮動小数点値を取得する(Long.MAX_VALUE - delta
のように)必要なデルタを見ることができますか? – GhostCatはい、両方とも異なります –
'2^53 - 1'より大きいlong値は、正確に二重表現で表すことはできません。 –