2
이 코드 행의 경우 출력이 모두 0 인 백을 얻을 수 있습니다. 이제 올바르게 이해한다면 ab와 c는 실제 값의 약간 다른 버전을 저장할 수 있습니다 .3 따라서이 값에 대해 Float.compare (...)를 수행하면 출력 값으로 0이 아닌 값이 반환 될 것으로 예상됩니다. 왜 나는 그것들을 0으로 가져 옵니까?부동 소수점 연산 및 부동 소수점 값 비교
float a = 0.15f + 0.15f;
float b = 0.1f + 0.2f;
float c = 0.3f;
System.out.println(Float.compare(a, b)); //<--- outputs 0
System.out.println(Float.compare(a, c)); //<--- outputs 0
System.out.println(Float.compare(b, c)); //<--- outputs 0
그냥 있기 때문에 특정 경우에 충분히 정확하지 않습니다 것을 의미하지 않는다. –
'double' 값은'-0.1d + 0.2d'의 결과가'0.30000000000000004'이므로'-1','0','1'을 얻을 수 있습니다. 다른 숫자는 '0.3'). – Pshemo
@Pshemo :'0.1d'는 0.1f만큼 부정확하며 소수 자리가 더 많습니다. 부동 소수점 정밀도는 0.1을 나타낼 수 없으며 기본 -2의 반복 시리즈입니다. –