long double vs double
내가 사용하는 시스템에 따라 다양한 데이터 유형의 크기가 변경 될 수 있음을 알고 있습니다. XP 32 비트를 사용하고 C ++에서 sizeof () 연산자를 사용하면 long double은 12 바이트이고 double은 8 인 것처럼 보입니다.
그러나 대부분의 주요 소스에 따르면 long double은 8 바이트이므로 범위는 double과 동일합니다.
어떻게 12 바이트가 있습니까? long double이 실제로 12 바이트이면 값의 범위도 확장되지 않습니까? 또는 long 서명은 값이 double 범위를 초과하여 8 바이트 이상으로 확장 될 때만 사용됩니까 (컴파일러 수치)?
감사합니다.
Wikipedia 에서 인용 :
x86 아키텍처에서 대부분의 컴파일러는 해당 하드웨어에서 지원하는 80 비트 확장 정밀도 유형 (데이터 구조를 유지하기 위해 12 또는 16 바이트로 저장되는 경우도 있음)보다 long double을 구현합니다.
과
컴파일러는 현재 소프트웨어에서 구현되는 128 비트 4 중 정밀도 형식에 long double을 사용할 수도 있습니다.
즉, 예, a long double
는 a보다 더 큰 범위의 값을 저장할 수 있습니다 double
. 그러나 그것은 완전히 컴파일러에 달려 있습니다.
x64의 최신 컴파일러의 경우 Clang 및 GCC는 16 바이트 double을 사용 long double
하는 반면 VC ++는 8 바이트 double을 사용합니다. 즉, Clang 및 GCC를 사용하면 더 높은 정밀도의 배정 밀도를 얻을 수 있지만 VC ++의 long double
경우 double
. 최신 x86 CPU는 이러한 16 바이트 더블을 지원하므로 Clang과 GCC가 옳은 일을하고 있다고 생각하며 더 높은 수준의 언어 프리미티브를 사용하여 더 낮은 수준의 하드웨어 기능에 액세스 할 수 있습니다.
숫자의 표준 바이트 크기는 모든 플랫폼에서 보장되는 최소 크기입니다. 일부 시스템에서는 더 클 수 있지만 결코 작아지지는 않습니다.
내 프로그래밍 초보자 경험에 관한 한 다음과 같습니다.
주기적으로 정규화 된 float 사용 [-1.0, + 1.0]
double 또는 long double로 정규화 값을 별도로 유지
정규화는 변수 값에 노이즈 = 작은 오류 = 고 빈도를 도입합니다.
때때로 중앙값을 별도로 유지하고 데이터를 정렬하여 정규화하는 것이 유용합니다 (원래 데이터 순서는 순열 벡터로 저장 될 수 있음).
참고 URL : https://stackoverflow.com/questions/3454576/long-double-vs-double
'Programing' 카테고리의 다른 글
C #에서 이중 디스패치? (0) | 2020.12.02 |
---|---|
애플리케이션에 어떤 자바 스크립트 엔진을 삽입 하시겠습니까? (0) | 2020.12.02 |
내비게이션 컨트롤러 상단 레이아웃 가이드가 맞춤 전환에 적용되지 않음 (0) | 2020.12.02 |
Redux 상태 및 URL 쿼리 매개 변수를 동기화하는 방법 (0) | 2020.12.02 |
Jenkins는 github에서 상태 코드 128을 반환했습니다. (0) | 2020.12.02 |