double
및 long
유형의 두 변수 y 및 z가 있습니다. 내 문제는 동등 연산자가 아래 코드 스 니펫에서 볼 수 있듯이 값이 같지 않더라도 true를 반환한다는 것입니다. Z는 Y 이상의 작은 값이있는 경우같음 값에 대해 같음 연산자가 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
}
}
내 쿼리입니다 왜 y를 == z의 사실오고있다.
이 동작을 설명 할 수 있습니까?
산출이 값을 인쇄 시도 :
당신은
Math.nextDown
을 사용하여 다른 부동 소수점 값을 얻기 위해 (Long.MAX_VALUE - delta
에서와 같이) 필요한 델타를 볼 수 있습니까? – GhostCat예, 둘 다 다릅니다. –
'2^53-1'보다 긴 값은 정확히 double로 표시 될 수 없습니다. –