2014-02-27 3 views
0

누군가이 루프가 무한 루프라는 것을 왜 말해 줄 수 있습니까?Java 무한 루프

double count = 0.0; 
while(count != 1.0) 
{count += 1.0/10;} 

그리고이 루프는 내가 초보자로서이 주위에 내 머리를 정리하려고했는데 무한 루프

double count = 0.0; 
while(count != 1.0) 
{count += 1.0/3;} 

아니고, 정말 나를 위해 감각을 만드는되지 않는 이유.

+0

해결책 대신 '(<1.0 카운트) 동안 사용'. – iamnotmaynard

답변

0

부동 소수점 부문이 두 경우 모두에 참여하고 설명 할 수있는 게시물입니다. 부동 소수점 나누기는 값을 반올림하는 것으로 유명하지만 거의 동일하지만 정확하게는 아닙니다.

while 루프의 조건이 모두 같기 때문에 처음에는 반올림이 발생하여 정확하게 1.0에 도달 할 수 없으며 반올림은 반올림됩니다. 정확히 1.0에 도달 할 수있는 정도입니다.

조언이있는 단어는 프로덕션 수준에서 이러한 코드를 사용하지 마십시오.

0

첫 번째 경우의 숫자가 way double are added이므로 절대 값은 == 1.0이 아니므로 무한 사이클이됩니다. 각 반복에서이 사이클 카운트의 양이다

횟수 : 0.1 횟수 : 0.2 횟수 : 0.30000000000000004 횟수 : 0.4 횟수 : 0.5 횟수 : 0.6 횟수 : 0.7 횟수 : 0.7999999999999999 횟수 : 0.8999999999999999 개수 : 1.0999999999999999 수 : 1.2 횟수 : 제 2 사이클의 COU 1.3 [...]

0.9999999999999999 수 (이 수는 1.0과 다르다) nter는 == 1.0이므로 종료됩니다. 각 반복에서의 제 2 사이클 수의 양이다

횟수 : 0.3333333333333333가 횟수 : 0.6666666666666666 횟수 : 1.0