나는 왜 이것이 일어나고 있는지를 알아 내려고 거의 하루 종일 보냈다. 정수가 될 때까지 부동 소수점을 증가시킨 코드를 가지고 있었고, 값을 0.01 씩 증가 시켜서 트리거했다. 루프는 정수가 될 때까지 0.01 씩 계속 증가하지만, 결코 멈추지 않습니다. 디버깅이 끝나면 점점 더 부정확 해지는 숫자로 루프가 진행됨에 따라 결국 0.0000066이됩니다.
나는 아마 변수가 다른 곳에서 액세스하고 있었다 수 어떻게 든 내가 단순히 빈 "주"프로그램을 만든 생각 :루프의 값이 증가하면 다른 (잘못된) 값이 생성됩니까?
float value = 0;
for (int i=0; i<100; i++) {
value += 0.01f;
}
System.out.println(value); // Displays 0.99999934
System.out.println(value == 1); // Just in case it's displaying wrong in println (displays false)
왜 말까지 일이 아닌가요? 나는 그것이 float에 float을 추가 할 때 데이터 유형과 관련이있을 수 있다고 생각하지 않습니다.
[모든 부동 소수점 연산에 대해 알아야 할 사항] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg .html) –
@MadProgrammer 0-99는 여전히 100 회 반복됩니다. 100 * 0.01 = 1 – DannyMo
@MadProgrammer 아니요, 100 배가 될 것 같습니다. '<= 100'을하면 101 번 반복됩니다. –