십진수 정밀도를 높이기 위해 C++ 코드에서 "long double"을 사용하기로 결정했습니다. 그러나 다음 코드조차도 :소수점 오류
long double a=5;
long double b=0.54645;
long double c=a*b;
printf("%Lf\n", c);
은 내 컴퓨터에서 -0.00000을 생성합니다. 나는 컴파일러의 잘못이라고 생각한다.
동기 부여 : 나는 많은 double을 다루고, 그들을 곱한 다음 결과를 추가합니다. 추가하는 동안 정답에서 1e-6 미만으로 최종 답을 가져야합니다. 그러나 복식을 사용하면 정확한 문제로 인해 잘못된 답을 얻을 수 있습니다. 틀린 대답으로, 나는 1e-6 이상을 의미한다. 그래서, 나는 long double을 사용하기로 결정했다.
또 다른 사실은 다음과 같은 사실에주의를 돌 렸습니다. 온라인 이중화를 사용하여 온라인 IDE (ideone.com)에서 프로그램을 실행하면 여전히 이중처럼 반올림되어 덜 정확한 답변을 얻게됩니다. 이것을 피하기 위해해야 할 일은 무엇입니까?
'표준 : cout' 당신이 무엇을 제공 않습니다
여기 작은 버전입니까? – Evert
그것은 나에게 -6.00905e-083을 주며, 당신도 알다시피 그것이 정확하지 않다. –
모든 값 ('a','b'' 및'c')을'printf '하면 어떻게됩니까? –