>백엔드 개발 >C++ >왜 비정규 부동 소수점 숫자가 있습니까?

왜 비정규 부동 소수점 숫자가 있습니까?

DDD
DDD원래의
2024-11-11 07:42:03315검색

Why Do We Have Subnormal Floating Point Numbers?

준정규 부동 소수점 수

부동 소수점 수는 IEEE 754 표준에 따라 구성됩니다. 단정밀도의 형식은 부호 1비트, 지수 8비트, 분수 23비트로 구성됩니다. 지수는 -127로 편향되어 있으므로 0은 2^-126을 나타내고 1은 2^-125를 나타냅니다.

"선행 비트 규칙"에서는 0.0을 제외한 모든 숫자가 이진수 1로 시작한다고 가정합니다. 이렇게 하면 선행 숫자에 대한 정밀 비트 낭비를 방지할 수 있습니다. 그러나 지수 및 분수 비트가 모두 0인 0.0에 대한 예외가 생성됩니다.

결과적으로 표시할 수 있는 0이 아닌 가장 작은 숫자는 1.0 × 2^-126입니다. 더 작은 수를 표현하기 위해 엔지니어들은 선행 비트가 0이고 고정 지수가 -126인 비정규 수를 도입했습니다.

가장 큰 비정규 수는 0.FFFFFE × 2^-126으로, 이는 매우 가깝습니다. 비정규수가 아닌 가장 작은 숫자로. 0이 아닌 가장 작은 비정규 수는 0.000002 × 2^-126으로, 이는 0.0에 훨씬 더 가깝습니다.

비정규 수는 정밀도와 표현 길이 간의 균형입니다. 예를 들어, 0이 아닌 가장 작은 비정규의 정밀도는 1비트에 불과하므로 이를 2로 나누면 정확히 0.0이 됩니다.

시각화에서 비정규 숫자는 지수 0 범위의 길이를 두 배로 늘리고 길이를 절반으로 줄입니다. 비정규가 없는 시스템과 비교하여 해당 범위에 있는 점의 수입니다. 이로 인해 표현 가능한 숫자 공간에 약간의 공백이 발생합니다.

C에서 float 데이터 유형은 단정밀도 IEEE 754 부동 소수점 숫자를 나타냅니다. 비정규수는 비정규수에 대해 false를 반환하고 정규수에 대해 true를 반환하는 isnormal() 함수를 사용하여 식별할 수 있습니다.

위 내용은 왜 비정규 부동 소수점 숫자가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.