Dao*_* Vi 3 java precision double
我正在尝试以下代码:
Double a = Double.MAX_VALUE - (1000000000 * 100000000 * 1000000);
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)
但是,结果仍然是1.7976931348623157E308(最大值为Double)
有人可以向我解释一下吗?
1000000000 * 100000000 * 1000000 是3个整数的乘法,这会导致溢出.
即使您通过写作避免溢出:
Double a = Double.MAX_VALUE - (1000000000.0 * 100000000.0 * 1000000.0);
Run Code Online (Sandbox Code Playgroud)
你可能仍然没有看到差异,因为你减去的数字Double.MAX_VALUE与Double.MAX_VALUE(~1.797*10 ^ 308 相比,可以忽略不计),大约比你试图从它减去的数量级大275个数量级.