오늘 저는 Math.pow()의 독특한 행동을 보았습니다.Java의 Math.pow가 결과를 반올림합니까?
long N1 = 999999999999999999L;
System.out.println("N1 : " + N1);
long N2 = (long) Math.pow(N1, 1);
System.out.println("N2 : " + N2);
나는 다음과 같은 출력을 얻을 :
N1 : 999999999999999999
N2 : 1000000000000000000
난 항상 Math.pow는()만큼 정확한 결과를 생성 생각을 나는 다음과 같은 자바 코드의 출력을 이해할 수 없습니다입니다 전달 된 매개 변수는 오버플로가없는 경우 정수 또는 long입니다 (이 경우 true).
... 무엇을 Math.pow()를 사용하지 않고 변환을 수행하면 어떻게됩니까? 같은 일을하지 않습니까? –
@MichaelAaronSafyan 맞습니다! 'long N3 = (long) (double) N1;' –
'long'과'double'은 모두 64 비트를 차지하며 'long'으로 정확하게 표현할 수없는'double' 값이 많이 있습니다. 따라서 'double'값으로 정확히 표현할 수없는 'long'값이 많이 있어야합니다. 당신은 그들 중 하나를 발견했습니다. –