scv*_*scv 4 java math floating-accuracy pow
今天我遇到了Math.pow()的特殊行为.我无法理解以下java代码的输出:
long N1 = 999999999999999999L;
System.out.println("N1 : " + N1);
long N2 = (long) Math.pow(N1, 1);
System.out.println("N2 : " + N2);
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
N1 : 999999999999999999
N2 : 1000000000000000000
Run Code Online (Sandbox Code Playgroud)
我一直以为Math.pow()会产生精确的结果,只要传递给它的参数是整数或长整数,前提是没有溢出(在这种情况下也是如此).
Jig*_*shi 10
因为它投向long了double
System.out.println((double)999999999999999999L);
Run Code Online (Sandbox Code Playgroud)
输出:
1.0E18
Run Code Online (Sandbox Code Playgroud)
和
System.out.println((long)(double)999999999999999999L);
Run Code Online (Sandbox Code Playgroud)
输出:
1000000000000000000
Run Code Online (Sandbox Code Playgroud)