의 모든 진수는 내 컴퓨터에 double
유형 this 위키 백과 문서에 해당하는지 파악하고, long double
이 텍스트에 해당 x86 Extended Precision Format. double
의 floor(52/log2(10))
또는 15 자리가 정확해야하고 long double
의 floor(63/log2(10))
또는 19 자리 숫자가 신뢰할 수있는 이유인쇄 긴 더블 변수
.
코드 :
우리가 16cout.precision
을 설정하면
1.0000000000000000555e-01
1.0000000000000000555e-01
가 출력 될 것입니다 : 그것은 무사의
1.0000000000000001e-01
1.0000000000000001e-01
, 그 17 자리
int main()
{
double d=0.1;
long double ld=0.1;
std::cout.precision(19);
std::cout.setf(std::ios_base::scientific);
std::cout << d << std::endl;
std::cout << ld << std::endl;
return 0;
}
출력을 제공합니다 첫 번째 출력에서는 double
이고 두 번째 출력에서는 double
의 16 번째 숫자 부정확하다. 하지만 long double
의 경우 왜 잘못 되었습니까? long double
변수의 모든 19 자리 올바른 숫자를 얻는 방법이 있습니까?
내가 긴 double에 대해 printf("%.19Le\n",ld);
을 시도하면 정확히 동일한 결과를 얻습니다.
저는 OpenSUSE 12.1 및 g ++ 4.6.2를 사용합니다.
두 배입니다. 수레는 끝에'f'가 있고'L'은 두 배로 길어집니다 (물론 문제는 없습니다). – chris
감사합니다. –
감사합니다. '(long double) 1.0/(long double) 10.0'은'-std' 옵션없이 동작합니다. 'long double ld = 0.1L;'도 작동합니다. – Sergey