IEEE 754 반정밀도, 단정밀도, 배정밀도, 사정밀도 형식에 대한 기계 입실론, 유효 십진 자릿수, 표현 가능한 값의 간격(ULP)을 구한다.
입력
형식과 값
IEEE 754 이진 형식. 각 형식은 가수에 정해진 수의 비트를 할당한다.
살펴볼 수. 표현 가능한 값 사이의 간격을 이 크기에서 계산한다.
결과
값을 입력하면 계산 결과가 표시됩니다.
정밀도
1과 그다음으로 큰 표현 가능한 수 사이의 간격이며, 배정밀도 (64비트) 형식의 상대 분해능이다.
최소 단위(ULP)로, 1,000와 그 바로 위의 표현 가능한 수 사이의 거리이다.
세부
암묵적인 선행 비트를 포함한 가수의 정밀도 비트 수.
이 형식이 신뢰성 있게 표현할 수 있는 유효 십진 자릿수의 근사값.
1,000 근처의 실수를 가장 가까운 표현 가능한 값으로 반올림할 때의 최대 절대 오차.
부동소수점 정밀도
컴퓨터는 실수를 유한한 비트 수에 저장하므로 대부분의 값은 근사적으로만 보관된다. 이 계산기는 IEEE 754 이진 형식인 반정밀도, 단정밀도, 배정밀도, 사정밀도의 정밀도를 보고한다. 기계 입실론, 신뢰성 있는 십진 자릿수, 그리고 사용자가 고른 값에서 표현 가능한 수 사이의 간격(ULP)을 계산한다. 이들은 부동소수점 연산이 정밀하지만 정확하지는 않은 이유를 함께 설명한다.
부동소수점이 수를 저장하는 방식
IEEE 754 수는 부호, 가수(유효 숫자), 그리고 이를 2의 거듭제곱으로 배율 조정하는 지수로 표현된다. 이는 밑이 2인 과학적 표기법과 매우 비슷하다. 각 형식은 가수에 할당되는 비트 수를 정한다. 반정밀도는 가수 11비트, 단정밀도는 24비트, 배정밀도는 53비트, 사정밀도는 113비트를 가지며, 각 수치에는 암묵적인 선행 비트 하나가 포함된다. 가수 비트가 많을수록 분해능은 더 미세해진다.
기계 입실론
분해능을 가장 깔끔하게 나타내는 척도는 기계 입실론으로, 1.0과 그 바로 위의 표현 가능한 수 사이의 간격이다.
여기서 는 가수 비트의 수이다. 배정밀도에서는 이다. 이는 상대 한계로서, 어떤 실수든 최대 의 상대 오차로 저장된다. 신뢰성 있는 유효 십진 자릿수는 여기서 곧바로 로 따라 나오며, 배정밀도의 경우 약 15.7자리이다.
ULP: 크기에 따라 커지는 간격
기계 입실론은 1.0 근처의 간격을 나타내지만, 부동소수점 수는 균등하게 배치되어 있지 않다. 연속한 표현 가능한 값 사이의 간격인 **최소 단위(ULP)**는 크기에 비례해 커진다.
1 근처에서는 간격이 기계 입실론과 같고, 1,000 근처에서는 약 1,000배 크다. 이것이 부동소수점이 일정한 상대 정밀도를 유지하면서도 수가 커질수록 절대 정밀도를 잃는 이유이다.
계산 예시
배정밀도와 값 1000을 살펴보자. 지수는 이므로 다음과 같다.
ULP(1000)=29−52=2−43≈1.14×10−13
1000 근처의 최대 반올림 오차는 그 절반인 약 이다. 따라서 배정밀도는 1000과 1000.0000000000001을 구별할 수 있지만, 열여섯 번째 유효 자릿수에서 차이 나는 값과는 구별하지 못한다.
0.1이 정확하지 않은 이유
이진 부동소수점은 2의 거듭제곱의 합만 표현할 수 있으며, 0.1은 유한한 이진 전개를 갖지 않는다. 이는 1/3이 십진에서 유한 전개를 갖지 않는 것과 같다. 따라서 0.1은 가장 가까운 표현 가능한 값으로 반올림되며, 이것이 대부분의 언어에서 0.1 + 0.2가 정확히 0.3이 되지 않는 이유이다. 그 차이는 기계 입실론 수준이며 대개 무해하지만, 긴 계산을 거치며 누적되며 화폐를 부동소수점이 아니라 정수나 십진 자료형으로 흔히 저장하는 이유이기도 하다. 정수 자체가 이진으로 부호화되는 방식은 2의 보수 변환기를 참고하면 된다.
자주 묻는 질문 (FAQ)
기계 입실론이란 무엇인가?
기계 입실론은 1.0과 1.0보다 큰 다음 부동소수점 수 사이의 간격이다. 이는 2를 가수의 소수부 비트 수의 음수만큼 거듭제곱한 값과 같으며, 배정밀도에서는 2⁻⁵², 약 2.22 × 10⁻¹⁶이다.
기계 입실론은 형식의 상대 분해능을 측정한다. 어떤 실수든 입실론의 절반을 넘지 않는 상대 오차로 저장된다. 이는 형식이 신뢰성 있게 담을 수 있는 자릿수를 가늠하는 표준 척도이다.
ULP란 무엇인가?
ULP는 "최소 단위(unit in the last place)"의 약자로, 한 부동소수점 수와 그 바로 위의 표현 가능한 수 사이의 거리이다.
고정된 기계 입실론과 달리 ULP는 크기에 따라 커진다. 1 근처에서는 간격이 기계 입실론과 같고, 1,000 근처에서는 약 1,000배 크며, 10억 근처에서는 더욱 크다. 간격이 값에 비례해 커지므로 부동소수점 수는 범위 전체에 걸쳐 거의 일정한 상대 정밀도를 유지하는 반면, 수가 커질수록 절대 정밀도는 떨어진다.
0.1은 왜 정확히 저장되지 않는가?
이진 부동소수점은 2의 거듭제곱의 합만 표현할 수 있다. 십진 분수 0.1은 유한한 이진 전개를 갖지 않으며, 이는 1/3이 유한한 십진 전개를 갖지 않는 것과 같다. 따라서 0.1은 가장 가까운 표현 가능한 값으로 반올림되는데, 그 값은 0.1보다 약간 크다.
이것이 대부분의 언어에서 0.1 + 0.2가 정확히 0.3이 되지 않는 이유이다. 오차는 기계 입실론 수준으로 매우 작지만 여러 연산을 거치며 누적되며, 화폐 값을 흔히 정수나 십진 자료형으로 저장하는 이유이기도 하다.
각 형식은 십진 자릿수를 몇 자리까지 담는가?
신뢰성 있는 유효 십진 자릿수는 대략 가수의 소수부 비트 수에 2의 로그값(약 0.301)을 곱한 값이다. 반정밀도는 약 3자리, 단정밀도는 약 7자리, 배정밀도는 약 15~16자리, 사정밀도는 약 34자리를 제공한다. 이는 안전하게 왕복할 수 있는 자릿수이며, 이보다 많은 자릿수를 출력하면 의미 있는 정밀도가 아니라 이진 표현의 반올림 흔적이 드러난다.