Java의 부동 소수점 불일치: 정밀도 제한
Java 프로그램에서는 부동 소수점 값을 합산할 때 특이한 동작이 발생할 수 있습니다. . 쿼리에서 관찰된 바와 같이, 25개의 double 값 배열에 0.04를 추가하는 간단한 루프는 예상치 못한 동작의 결과를 생성합니다.
IEEE 단일 및 double과 같은 부동 소수점 값은 프로그래밍 언어에서 일반적으로 사용됩니다. 그러나 이러한 형식은 대부분의 소수점 이하 자릿수를 정확하게 나타내지 않습니다. 이는 십진 부동 소수점과 근본적으로 다른 이진 부동 소수점 표현 때문입니다.
구체적으로 이진 부동 소수점으로 정확하게 표현할 수 있는 유일한 분수 값은 2의 음수 거듭제곱의 합입니다. 예: 0.5(2^-1), 0.125(2^-3) 또는 0.625(2^-1 2^-3). 소수를 이러한 합계로 정확하게 표현할 수 없는 경우 결과는 약간 근사치입니다.
제공된 예에서 값 0.96은 음의 2제곱의 합으로 정확하게 표현할 수 없습니다. 따라서 0.04에 더해 전체 소수 정밀도로 인쇄하면 결과가 원래 값에서 약간 벗어납니다.
이러한 정밀도 제한은 이진 부동 소수점 표현에 내재되어 있으며 작업할 때 고려해야 합니다. 부동 소수점 계산. 정확한 정밀도가 중요한 경우 대체 표현이나 알고리즘을 사용해야 할 수도 있습니다.
위 내용은 Java에서 0.04를 반복적으로 추가하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!