2012-02-23 1 views
6

: http://en.cppreference.com/w/cpp/language/types더블 - 다음 사이트에 따르면 IEEE 754 개 대안

"더블 - 더블 정밀도 부동 소수점 형 보통 IEEE-754 64 비트 부동 소수점 형.".

"보통"이라고 표시됩니다. 가능한 다른 형식/표준은 C++ double에서 사용할 수 있습니까? 어떤 컴파일러가 IEEE 형식의 대안을 사용합니까? 아니면 건축?

+0

나는 모든 예외가 아주 오래 될 것이라고 생각합니다. 예를 들어 60 비트 부동 소수점을 가진 Control Data Cyber를 사용했습니다. –

+0

[모든 지식의 저장소] (http://en.wikipedia.org/wiki/Floating_point#History) : 일부 IBM 및 Cray 메인 프레임과 80 년대 초 이전의 것들은 비 IEEE 형식을 사용합니다. –

+0

C++ 표준을 준수하는 모든 작업이 수행됩니다. –

답변

3

짧은 역사 수업을 위해 Intel Floating Point Case Study을 확인할 수 있습니다.

인텔 컴파일러에는 최적화시 최적화가 적용되어 소위 fast-math feature을 사용할 수있는 옵션이 있습니다. 따라서 수학은 훨씬 빨라지지만 IEEE 표준을 엄격하게 준수하지는 않습니다. fp-model option에 엄격한 표준 준수를 시행 할 수 있습니다.

NVidia GPU의 CUDA 언어는 IEEE 표준을 엄격하게 준수하지 않을 경우 훨씬 더 빠른 수학 라이브러리를 사용합니다. 이것은 수학을 더 빨리 만들뿐만 아니라 특히 초월 함수에 사용되는 레지스터의 수를 줄입니다.

준수 여부는 사안에 따라 다릅니다. 인텔 최적화에 문제가 발생하여 double precision 수학으로 정확한 결과를 얻으려면 fp-model strict 옵션을 켜야했습니다.

6

Vaxen, Crays 및 IBM 메인 프레임은 여전히 ​​합리적으로 널리 사용되고 있습니다. 그것들의 대부분 (모두?)도 IEEE 부동 소수점을 사용할 수 있지만 때로는 특수 애드온 만 사용할 수 있습니다. 다른 경우 (IBM) IEEE 산술은 상당한 속도 저하를 가져올 수 있습니다.

오래된 시스템의 경우 대부분의 메인 프레임 (Unisys, Control Data 등)은 고유 한 부동 소수점 형식을 사용했습니다. 대부분의 경우 IEEE와 거의 유사하지 않았지만 실제로 준수하는 것은 아닙니다.

0

Atmel AVR (그 중 8 비트 데이터 CPU인데 사용되는 다른 가능한 형식/표준은 무엇일까요?)에 대한 대답으로, 아마도 가치가 있습니다. 일부 Arduinos에서)는 64 비트로 double을 구현하지 않습니다.

double 내가 다른 CPU가 비슷한 구현을 믿고 32 비트입니다 및 float

과 같은 방식으로 구현 말한다 어디 GCC wiki, avr-gcc page과 특히 'double' subsection of 'Deviations from the Standard'을 볼 수 있지만, 나는 그들을 찾을 수 없었다.

관련 문제