문제

내가 아는 한 플로팅 포인트 값은 n * 2^e 형태입니다.

  • 플로트 범위는 n = -(2^23-1) -(2^23-1), e = -126-127입니다.
  • 이중 범위는 n = -(2^52-1) -(2^52-1) 및 e = -1022-1023입니다.

나는 C ++ 표준을 살펴보고 있었지만 표준이이를 지정하는 장소를 찾지 못했거나, 다른 (IEEE) 표준으로 정의 된 범위와 플로트, 이중 및 긴 이중 유형의 연관성을 의무화하지 못했습니다. 3.9.1.8에서 찾은 유일한 관련 사항은 다음과 같습니다.

플로트, 더블 및 긴 더블의 세 가지 부동 소수점 유형이 있습니다. 이중 유형은 플로트만큼 최소한 정밀도를 제공하며, 유형의 긴 이중은 최소한 이중만큼 정밀도를 제공합니다. 유형 플로트의 값 세트는 유형 값의 값 세트의 서브 세트입니다. 이중 유형 값 세트는 유형의 값 값 세트의 서브 세트입니다. 부동 소수점 유형의 값 표현은 구현 정의입니다.

그리고 유형이 제공하는 최소 범위에 대한 언급이 없습니다.

플로팅 포인트 유형의 (최소?) 값 범위를 어디서/어떻게 지정합니까? 아니면 컴파일러가 값 범위를 자유롭게 선택하고 여전히 표준 준수 할 수 있습니까?

도움이 되었습니까?

해결책

정수 번호 한계와 마찬가지로 한계 float, double 그리고 long double C 표준에서 가져옵니다. 상수의 최소값 FLT_MAX, DBL_MAX 그리고 LDBL_MAX ~이다 1E+37. 그들의 *_MIN 변형 최대 값은입니다 1E-37.

다른 팁

당신이 인용 한 것은 C ++의 부동 소수점 유형에 대해 보장되는 모든 것입니다. 말했듯이, 그들의 표현은 구현 정의입니다.

그러나 한계에 대한 정보와 유형이 IEC 559 (IEEE 754) 지정된 유형인지 여부에 대한 정보는 std::numeric_limits 템플릿 <limits>.

표준은 종종 하드웨어 의존적이며 시간이 지남에 따라 변경되기 때문에 이러한 것들을 지정하지 않습니다. 오늘날 32 비트는 표준으로 간주되지만 10 년 안에 64 비트 미만의 일을하는 것은 불쾌한 것처럼 보일 수 있습니다.

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