두 배의 긴

long double

C 및 관련 프로그래밍 언어에서,long double 언어 표준은 적어도 2배정밀도보다 정밀도가 높은 부동 소수점 데이터 유형을 가리킨다.double. C의 다른 부동소수점 유형과 마찬가지로 반드시 IEEE 형식에 매핑되지는 않을 수 있다.

long double주식회사

역사

long double원래 1989년 C 표준에는 유형이 존재하였으나,[1] 1999년 C 표준의 개정, 즉 C99에 따라 표준 라이브러리를 확장하여 운영 중인 기능을 포함시킴으로써 지원이 개선되었다.long double예를 들어sinl()그리고strtold().

긴 이중 상수는 "L" 또는 "L"(하위 대소문자 L)로 접미사가 붙은 부동 소수점 상수(예: 0.3333333333333L)이다.접미사가 없으면 FLT_EQUAL_Method에 따라 평가가 달라진다.

구현

x86 아키텍처에서는 대부분의 C 컴파일러가 구현한다.long doubleC99/C11 표준(IEC 60559 부동소수점 산술(Annex F))에 명시된 대로 x86 하드웨어가 지원하는 80비트 확장 정밀도 유형(일반적으로 데이터 구조 정렬을 유지하기 위해 12바이트 또는 16바이트로 저장)으로 한다.x86의 경우 마이크로소프트 Visual C++가 예외로 되어 있어long double의 동의어.double.[2] Microsoft Windows의 Intel C++ 컴파일러는 확장 정밀도를 지원하지만/Qlong‑double로 바꾸다.long double하드웨어의 확장 정밀도 형식에 해당된다.[3]

컴파일러는 또한long double IEEE 754 쿼드러플-정밀 이진 부동 소수점 형식(이진 128)의 경우.이는 64비트 또는 n32 ABI,[6]64비트 ARM([7]AArch64)을 사용하는 HP-UX,[4] Solaris/SPARC,[5] MIPS(Linux와 같은 표준 AAPS 호출 규칙을 사용하는 운영 체제) 및 FLOT(IEEE)를 포함한 z/OS의 경우에 해당한다.[8][9][10]대부분의 구현은 소프트웨어에 있지만 일부 프로세서는 하드웨어 지원을 받는다.

On some powerPC 시스템,[11] long double2중 산술로 구현된다.long double값은 106비트 이상의 정밀도를 제공하는 두 개의 이중 제곱 값의 정확한 합으로 간주된다. 이러한 형식에서는long double유형이 IEEE 부동 소수점 표준을 준수하지 않는다.그렇지 않으면long double의 동의어일 뿐이다.double (이중 정밀도), 예: 32비트 ARM,[12]64비트 ARM(AArch64) (Windows[13] 및 MacOS[14]) 및 32비트 MIPS[15](이전 ABI, a.k.a. o32)

GNU C 컴파일러로long double유형(96비트 또는 128비트)에 사용되는 물리적 스토리지와 관계없이 x86 프로세서에서 80비트 확장 정밀도(80비트 확장 정밀도),[16] 일부 다른 아키텍처에서는long double이중으로 할 수 있다(: 파워로).PC[17][18][19]) 또는 128비트 4중 정밀도(예: SPARC[20]).gcc 4.3을 기준으로 x86에서도 4배 정밀도가 지원되지만 비표준형으로는__float128보다는long double.[21]

x86 아키텍처, 특히 x86의 x87 부동 소수점 명령은 80비트 확장 정밀 연산을 지원하지만, 자동으로 운영을 두 배(또는 단일) 정밀도로 반올림하도록 프로세서를 구성할 수 있다.반대로 확장정밀모드에서는 최종 결과가 낮은 정밀도로 저장되는 경우에도 중간 컴파일러 생성 계산에 확장정밀도를 사용할 수 있다(즉, FLT_EQUAL_METHOD == 2).Linux에서 gcc를 사용하는 경우 80비트 확장 정밀도가 기본값이며, 여러 BSD 운영 체제(FreeBSDOpenBSD)에서는 이중 정밀 모드가 기본값이며,long double운영은 효과적으로 두 배의 정밀도로 감소한다.[22](그러나 NetBSD 7.0 이상에서는 기본값이 80비트 확장 정밀도 입니다.)그러나 FLDCW "부하 제어 단어" 지침을 통해 개별 프로그램 내에서 이를 재정의할 수 있다.[22]x86_64에서 BSD는 기본적으로 80비트 확장 정밀도로 설정된다.Microsoft Windows with Visual C++도 프로세서를 기본적으로 이중 정밀 모드로 설정하지만 개별 프로그램(예:_controlfp_sVisual C++)[24]에서 기능한다.반면 x86용 Intel C++ 컴파일러는 기본적으로 확장정밀 모드를 활성화한다.[25]IA-32 OS X에서는long double80비트 확장 정밀도.[26]

기타규격

In CORBA (from specification of 3.0, which uses "ANSI/IEEE Standard 754-1985" as its reference), "the long double data type represents an IEEE double-extended floating-point number, which has an exponent of at least 15 bits in length and a signed fraction of at least 64 bits", with GIOP/IIOP CDR, whose floating-point types "exactly follow the IEEE부동 소수점 번호에 대한 표준 형식"으로, 이를 IEEE 754-2008 바이너리128로 보이는 것으로 간주하여 해당 이름을 사용하지 않고 4배 정밀도로 유지한다.

참고 항목

참조

  1. ^ ANSI/ISO 9899-1990 미국 국가 프로그래밍 언어 표준 - C, 섹션 6.1.2.5.
  2. ^ MSDN 홈페이지, Visual C++ 컴파일러 정보
  3. ^ 인텔 개발자 사이트
  4. ^ Hewlett Packard (1992). "Porting C Programs". HP-UX Portability Guide - HP 9000 Computers (PDF) (2nd ed.). pp. 5-3 and 5-37.
  5. ^ 수치 연산 가이드, 2장: IEEE 산술
  6. ^ "MIPSpro™ N32 ABI Handbook" (PDF). 1999. Retrieved 2020-05-26.
  7. ^ "Procedure Call Standard for the Arm® 64-bit Architecture (AArch64)". 2020-10-01. Archived (PDF) from the original on 2020-10-02.
  8. ^ "Floating-point types". 2020-10-09. Retrieved 2020-10-09.
  9. ^ Schwarz, Eric (June 22, 2015). "The IBM z13 SIMD Accelerators for Integer, String, and Floating-Point" (PDF). Retrieved July 13, 2015.
  10. ^ Schwarz, E. M.; Krygowski, C. A. (September 1999). "The S/390 G5 floating-point unit". IBM Journal of Research and Development. 43 (5/6): 707–721. CiteSeerX 10.1.1.117.6711. doi:10.1147/rd.435.0707. Retrieved October 10, 2020.
  11. ^ "The saga of the Power ISA 128-bit long double". 2018-12-22. Retrieved 2021-12-26.
  12. ^ "ARM® Compiler toolchain Compiler Reference, Version 5.03" (PDF). 2013. Section 6.3 Basic data types. Retrieved 2019-11-08.
  13. ^ "llvm/llvm-project". GitHub. Retrieved 2020-09-03.
  14. ^ "llvm/llvm-project". GitHub. Retrieved 2020-09-03.
  15. ^ "System V Application Binary Interface: MIPS(r) Processor Supplement" (PDF) (3rd ed.). 1996. Retrieved 2020-05-26.
  16. ^ GNU 컴파일러 컬렉션 사용, x86 옵션.
  17. ^ GNU 컴파일러 모음, RS/6000 및 PowerPC 옵션 사용
  18. ^ Macintosh 내부 - Wayback Machine보관PowerPC 수치 2012-10-09
  19. ^ 다윈을 위한 128비트 긴 이중 지원 루틴
  20. ^ SPARC 옵션
  21. ^ GCC 4.3 릴리스 정보
  22. ^ a b Brian J. Gough와 Richard M.스톨맨, GCC 소개, 섹션 8.6 부동 소수점 문제 (네트워크 이론 Ltd, 2004)
  23. ^ "Significant changes from NetBSD 6.0 to 7.0".
  24. ^ _콘트롤프_s, 마이크로소프트 개발자 네트워크(2011년 2월 25일).
  25. ^ Intel C++ 컴파일러 설명서, -fp-model(/fp) 옵션 사용.
  26. ^ "IA-32 Function Calling Conventions".