C와 C++의 Float와 Double의 크기는 어떻게 됩니까?
혹시 와 비슷한 표준형이 있는지 알아보고 있었습니다.uint32_t
항상 32비트 부호 없는 적분 타입으로 매핑되지만 찾을 수 없었습니다.
크기는?float
모든 플랫폼에서 항상 4바이트?
크기는?double
항상 8?
그 문제에 대해 어떤 기준이 있습니까?
모든 플랫폼(x86 및 x64)에서 내 크기가 항상 동일한지 확인하고 싶어서 표준 int 유형을 사용하고 있지만 유사한 유형의 디프를 찾을 수 없습니다.float
그리고.double
.
C99 표준에서 발췌한 표준 부속서 F(C++ 표준은 이 부속서에 대해 명시적으로 언급하지는 않지만 참조별 변경 없이 모든 영향을 받는 기능을 포함합니다.또한 호환성을 위해서는 유형이 일치해야 합니다.)
IEC 60559 부동 소수점 산술
F.1 소개
1 이 부속문서는 IEC 60559 부동 소수점 표준에 대한 C 언어 지원을 명시합니다.IEC 60559 부동 소수점 표준은 특히 마이크로프로세서 시스템을 위한 이진 부동 소수점 산술, 제 2판(IEC 60559:1989), 이전에 지정된 IEC 559:1989 및 IEEE 표준 for Binary 부동 소수점 산술(ANSI/IEEE 754-1985)입니다.IEEE Radix-Independent Floating-Point 산술 표준(ANSI/IEEE 854-1987)은 이진 표준을 일반화하여 Radix와 워드 길이에 대한 의존성을 제거합니다.IEC 60559는 일반적으로 IEC 60559 작동, IEC 60559 형식 등과 같이 부동 소수점 표준을 참조합니다.다음을 정의하는 구현.
__STDC_IEC_559__
C 언어와 IEC 60559 간의 결합이 표시된 경우, 달리 명시되지 않는 한, IEC 60559-지정 거동은 참조에 의해 채택됩니다.음과 양의 무한대는 IEC 60559 형식으로 표현할 수 있으므로 모든 실수는 표현 가능한 값의 범위 내에 있습니다.
포함해서<math.h>
(또는 C++일 수 있음<cmath>
), 및 테스트__STDC_IEC_559__
.
매크로가 정의된 경우, 유형이 더 잘 지정될 뿐만 아니라 (float
32비트와double
64비트가 될 뿐만 아니라 내장된 연산자와 표준 기능의 동작도 더욱 구체화됩니다.
매크로가 부족하다고 보장되는 것은 아닙니다.
x86 및 x86_64(amd64)의 경우 유형에 의존할 수 있습니다.float
그리고.double
IEC-60559-적합하지만 이를 사용하는 기능과 이에 대한 작동은 그렇지 않을 수 있습니다.
크기에 대해서는 아무 말도 하지 않습니다.
3.9.1.8
부동 소수점 유형에는 플로트, 더블, 롱 더블의 세 가지가 있습니다.타입 더블은 플로트만큼의 정밀도를 제공하며 타입 롱 더블은 적어도 더블만큼의 정밀도를 제공합니다.유형 플로트의 값 집합은 유형 더블의 값 집합의 부분 집합이고, 유형 더블의 값 집합은 유형 롱 더블의 값 집합의 부분 집합입니다.부동 소수점 유형의 값 표현은 구현으로 정의됩니다.적분형과 부동형을 통틀어 산술형이라고 합니다.표준 템플릿 std::numeric_limits(18.3)의 전문화는 구현을 위한 각 산술 형식의 최대값과 최소값을 지정해야 합니다.
C++ 표준은 아무 의미가 없지만, 대부분의 플랫폼 C++는 IEEE의 싱글/더블 정밀도 표준을 사용하는데, 싱글 정밀도는 4바이트, 더블 정밀도는 8바이트로 정의됩니다.
- http://en.wikipedia.org/wiki/Single-precision_floating-point_format
- http://en.wikipedia.org/wiki/Double-precision_floating-point_format
저는 이 사건들의 예외에 대해서 잘 모르겠습니다.
부동 소수점 연산은 CPU에 의해 낮은 수준으로 구현되기 때문에 C++ 표준은 어느 하나에 대해서도 크기를 요구하지 않습니다.float
,double
아니면long double
. 제가 지정한 순서는 정확도가 같은 순서 또는 증가하는 순서라는 것뿐입니다.
당신의 최선의 선택은 다음을 사용하는 것입니다.static_assert
,sizeof
,typedef
그리고.#define
크로스 플랫폼 부동 소수점 유형을 신중하게 정의합니다.
저는 동일한 크기의 플로트를 가지고 있더라도 이러한 플로트가 다른 플랫폼에서 동일하게 해석되는지 확신할 수 없다는 점을 지적하고 싶습니다.당신은 '네트워크 상의 유동성'에 관한 많은 논문을 읽을 수 있습니다.Floats non-determinism은 알려진 문제입니다.
크로스 플랫폼 데이터 유형 호환성을 제공하는 라이브러리를 사용해 볼 수 있습니다.
" C위험입니다, 및는 다른 크기가 및 , 이후int, long 및 friends는 서로 다른 플랫폼에서 크기가 다릅니다(현재 시스템에서는 32비트 및 64비트, 128비트 이후).일부 응용 프로그램의 경우 32비트 제한에 접근하지 않기 때문에(또는 부호 없는 정수를 사용하는 경우 31비트) 무관한 것처럼 보일 수 있지만 64비트 시스템에서 개체를 직렬화하고 32비트 시스템에서 병렬화하면 불쾌하게 놀랄 수 있습니다.
APR은 플랫폼마다 다를 수 있는 기본 유형에 대한 유형 데프 세트를 제공합니다.이러한 유형의 디프는 크기를 보장하고 퍼지 내장형을 방지합니다.그러나 일부 애플리케이션(대부분 수치)의 경우 성능을 극대화하기 위해 네이티브 머신 워드 크기(일반적으로 int가 나타내는 의미)를 사용하는 것이 중요할 때도 있습니다."
Gigi SAYFAN - 자신만의 플러그인 프레임워크 구축 (http://philippe.ameline.free.fr/techytechy/071125_PluginFramework.htm) 부터)
X86의 경우 IEEE 단일 및 이중 정밀도 숫자를 사용하더라도 내부 계산은 부동 소수점 제어 단어(FCW)의 영향을 받습니다.내부 계산은 일반적으로 64비트 또는 80비트(롱더블)입니다.인라인 어셈블리 코드를 사용하여 이를 재정의할 수 있지만 일부 이중 정밀 라이브러리 함수가 이를 다시 설정하지 않는다는 보장은 없습니다.
마이크로소프트는 16비트 컴파일러에서 80비트 길이의 더블을 지원했지만 32비트 및 64비트 컴파일러에서는 지원이 중단되었고, 이제 롱 더블은 64비트의 더블과 같습니다.
언급URL : https://stackoverflow.com/questions/25524355/what-is-the-size-of-float-and-double-in-c-and-c
'programing' 카테고리의 다른 글
명령 프롬프트에서 PowerShell 명령 실행(ps1 스크립트 없음) (0) | 2023.09.11 |
---|---|
경로가 PowerShell의 폴더 또는 파일인지 확인 (0) | 2023.09.11 |
구조 객체가 없는 C 포인터 산술 (0) | 2023.09.11 |
데이터 프레임의 두 열을 명명된 벡터로 변환 (0) | 2023.09.11 |
Angular App은 새 배포 후 캐시를 삭제해야 함 (0) | 2023.09.11 |