2012-03-24 3 views
1

long double이라는 C89 (ANSI C) 표준의 데이터 유형이 있지만 long double (<math.h>)을 지원하는 수학적 기능은 없습니다. 예를 들어, sin 함수는 long 인수를 허용합니다.long double은 ANSI C에서 유용합니까?

C99은 long double에 대한 수학 함수를 지원합니다.

제 질문은 ANSI C에서 long double을 지원하는 수학적 기능이없는 경우 유용하다고 long double는 무엇입니까?

+8

'+','-','*'및'/'는 어떨까요? –

+0

최상의 결과를 얻기 위해'long double '을 사용하는 이러한 유형의 응용 프로그램에서는 +, -, *, /가 충분하지 않습니다. x86_64 용 –

+0

은 부동 상태이며 SSE로 대체되었습니다. 그러나 적어도 GCC long double은 float과 double이 SSE를 사용하는 경우에도 여전히 x87을 사용합니다. 따라서 코드 중 일부에 x87을 사용하려면 long double이 하나의 방법입니다. MSVC를 사용하면 double double은 SSP를 double로 사용할 때 x87을 얻을 수 없으므로 long double이 두 배의 동의어로 보입니다. 아마도 귀하의 질문 : x87 여전히 유용합니다() 호환하거나 80 비트 부동 소수점 여전히 유용한 무엇입니까? 재미있는 질문입니다. –

답변

0

"long double"은 이중 정밀도 이상의 표현식을 계산하려는 경우 절대적으로 유용합니다.

재미있는 문제는 "정확히 'long double'"입니까?

대답 의존 플랫폼과/또는 컴파일러 : 당신이 그것을 스스로 할 수없는 것을 의미하지 않는다 무언가를 지원하지 않습니다

http://en.wikipedia.org/wiki/Long_double

0

해서 math.h.

기존 형식은 좋은 것으로, 길이가 같거나 더 긴 정밀도로 무언가를 요청할 수있는 플랫폼 간 방법이 있기 때문입니다. 어딘가에 언어가 없다면 할 수 없습니다 (최선의 방법은 long/double 형식의 구조체 또는 배열과 함께 무언가를 해킹하는 것입니다).

기능은 편의를위한 것입니다. 때때로 내장 된 sin 프로세서 함수를 사용할 수는 있지만 때때로 sin 함수 대신 sin 함수는 단순히 표준 연산을 사용하여 대답을 생성하거나 찾아 보는 알고리즘을 포함합니다.

원하는 경우 대상 플랫폼의 sinl 함수를 C99에서 C89로 복사 할 수 있습니다. 구현 목록은 다음과 같습니다. http://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/ieee754;hb=HEAD

또는 C99에만 고정하십시오.