source

16진수 부동 상수(C)

goodcode 2022. 8. 27. 09:30
반응형

16진수 부동 상수(C)

0x0.3p10어떤 가치를 나타냅니까?

그리고 이게 무슨 의미가 있을까요?p위의 문장에서요?

0x0.3p10는 C99에서(1) 도입된 16진수 부동소수점 리터럴의 예입니다.p는 기본 번호와 지수를 구분합니다.

0x0.3비트는 유의 부분(옵션 분수가 있는 부분)이라고 하며, 지수는 스케일링되는 두 개의 거듭제곱입니다.

이 특정 값은 다음과 같이 계산됩니다.0.316진수 또는3 * 16-1(3/16)에 곱한 값210(1024), 즉,3 * 1024 / 16또는192다음 프로그램에서 이를 확인할 수 있습니다.

#include <stdio.h>
int main (void) {
    double d = 0x0.3p10;
    printf ("%.f\n", d); // Outputs 192
    return 0;
}

부분6.4.4.2 Floating constantsC99의 자세한 내용은 다음과 같습니다.

부동 상수에는 지수 부분과 그 유형을 지정하는 접미사가 이어지는 유의 부분이 있습니다.유의 및 부품의 구성요소는 정수 부분을 나타내는 숫자 시퀀스와 마침표를 포함할 수 있습니다.., 뒤에 분수 부분을 나타내는 숫자 시퀀스가 이어집니다.

지수 부품의 구성요소는e,E,p, 또는P이어서 선택적으로 부호화된 숫자 시퀀스로 구성된 지수를 입력합니다.정수 부분 또는 분수 부분이 존재해야 합니다. 10진수 부동 상수의 경우 마침표 또는 지수 부분이 존재해야 합니다.

significand 부분은 (10진수 또는 16진수) 유리수로 해석되며, 지수 부분의 디지트시퀀스는 10진수 정수로 해석됩니다.10진수 부동 상수의 경우 지수는 유의 및 부품의 척도를 조정할 10의 거듭제곱을 나타냅니다.16진수 부동 상수의 경우 지수는 유의 및 부품의 척도를 조정할 2의 거듭제곱을 나타냅니다.

10진수 부동 상수의 경우 및 16진수 부동 상수의 경우FLT_RADIX는 2의 거듭제곱이 아니며, 결과는 가장 가까운 대표값 또는 가장 가까운 대표값 바로 옆에 있는 더 크거나 작은 대표값이 되며 구현 정의 방식으로 선택됩니다.16진수 부동 상수의 경우FLT_RADIX2의 거듭제곱이면 결과는 올바르게 반올림됩니다.


(1) 이러한 리터럴은 표준의 C++17 반복에서도 C++에 추가되었지만 포맷 및 해석 기능은 C++11의 일부였습니다.

언급URL : https://stackoverflow.com/questions/4825824/hexadecimal-floating-constant-in-c

반응형