2013-10-15 1 views
0

아래 코드는 내 코드이지만 if 문은 작동하지 않습니다.Long.MAX_VALUE에 도달 한 'long'값을 알 수있는 방법

int i = 0; 
while (true) { 
    long l = fibonacci(i++); 
    if (l < 0L && l > Long.MAX_VALUE) { 
    System.out.println("over"); 
    break; 
} 

}

어떻게 long 값이 Long.MAX_VALUE에 도달하면 나는 알 수 있습니까?

+1

L이로부터 Long.MAX_VALUE보다 클 수 없다. – kosa

+3

'l> Long.MAX_VALUE' 당신은 단지 그 상태를 잠깐보아야합니다. – Cruncher

답변

10

long 값이 long의 경계를 초과하면 오버플로가 발생합니다. 다음 피보나치 수는이 넘침으로 인해 음수가됩니다. 따라서 0보다 작은 수를 확인하는 것이 정확합니다. 그러나 이 해당 조건을 충족시킬 수 없기 때문에 Long.MAX_VALUE보다 큰지 확인할 필요가 없습니다. &&은 또 다른 실수였습니다. 숫자는 동시에 0보다 작고 (임의의) 양수보다 클 수 없습니다.

당신은 필요

if (l < 0L) { 
+0

대단히 감사합니다. 답이 맞습니다. 및 "l < 0L && l > Long.MAX_VALUE", 1 <0L이 false를 반환하면이 문장 "l < 0L && l > Long.MAX_VALUE"가 false를 반환합니까? – wyf

+0

답변에 만족한다면 동의하십시오. –

+0

@wyf 네, 원래 조건은'Long.MAX_VALUE'를 초과하지 않았을 때만이 아니라'false'를 항상 반환했을 것입니다. – rgettman