문제

간단하긴 하지만 구글링을 통해서도 찾을 수 없었습니다.부동 소수점 표현은 더 넓은 범위의 숫자를 지원하고 순수 정수보다 작업 속도가 느리다는 것을 알고 있습니다.또한 우리는 부동 소수점을 표현하기 위해 가수와 지수가 어떻게 사용되는지 알고 있습니다.하지만 내 질문은 32비트 시스템에서 s* b^e 출력이 32비트 또는 32비트보다 길다는 것입니다.(여기서 s=유효함수, b=밑, e=지수)

도움이 되었습니까?

해결책

부동 소수점 숫자의 가수와 지수를 나타내는 데 사용되는 정확한 비트 수는 CPU마다 다르므로 문제는 확실히 아키텍처에 따라 다릅니다.

매우 지배적인 표준이 하나 있습니다. IEEE 부동 소수점, 그리고에 따르면 이 관련 SO 질문 IA32를 포함하여 오늘날 만날 수 있는 모든 주요 CPU가 이를 구현합니다.

Wikipedia에 따르면 IEEE 부동 소수점은 모든 구현에서 다음 중 하나 이상을 사용할 수 있어야 합니다.

  • 바이너리32:24비트 가수(부호 비트 1개 포함) 및 8비트 지수
  • 바이너리64:53비트 가수(부호 비트 1개 포함) 및 11비트 지수

32비트라고 가정하면 IA 32 제품군 (이는 32비트를 사용하는 몇 안 되는 아키텍처 중 하나일 뿐입니다.) 부동 소수점 레지스터는 최대 80비트를 포함할 수 있습니다., 즉, Binary32, Binary64 및 15개의 지수 비트가 있는 비 IEC 80비트 형식이 모두 지원될 수 있음을 의미합니다.32비트와 64비트 명령어를 구별하기 위해 대부분의 어셈블러는 다음과 같은 크기 수정자를 사용합니다. QWORD 또는 DWORD.

또한 CPU 구현 외에도 언어는 IEEE 부동 소수점을 준수해야 할 수도 있습니다.예를 들어 C 언어에서 Annex 7은 매크로가 다음과 같이 지정합니다. __STDC_IEC_599__ 컴파일러에 의해 자동으로 정의됩니다. float Binary32로 보장되며 double 바이너리64. long double IEC로 고정되지 않았으므로 IA32 아치에서 80비트를 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top