2013-06-20 6 views
1

여러분! 나는 약간의 문제가 발생했습니다 : 나는 3 개의 double 값을 가진 간단한 덧셈을하고 있습니다. 결과는 사용 된 값보다 정밀도가 떨어집니다.복식을 추가 할 때 정확도가 떨어 집니까?

double minutes = 3; 
minutes = minutes/(24.0*60.0); // contains 0.00208333 
double hours = 3; 
hours = hours/24.0; // contains 0.125 
double days = 3; // contains 3 

double age = days + hours + minutes; // result is 3.12708 

이 동작을 피할 방법이 없습니다.

+0

가 어떻게의 값을 확인 마십시오 변수? – Spook

+3

무엇이 문제입니까? 계산은 괜찮아 보인다. 어떻게 결과를 출력합니까? 더 많은 숫자를 인쇄 하시겠습니까? – zch

+7

참고 사항 : 1) 값을 출력하는 방식에 따라 모든 유효 자릿수가 표시되지 않을 수 있으며 2) 복식 값이 정확히 0.1 – PlasmaHH

답변

5

귀하의 게시물에 대한 의견이 말한대로 계산에 문제가없는 것으로 보입니다.

더 정밀 아무 문제가 없습니다까지 setprecision()

+0

실제로 계산이 정확합니다. printf()를 사용하여 이것을 검증했다. 정밀도의 손실은 std :: cerr로 출력하거나 std :: stringstream에 할당하여 발생합니다. setprecision이 트릭을했습니다. 고마워요! – XQDev

0

찾고 고려보고 싶어합니다. 0.00208333 및 3.12708의 중요한 수치는 모두 6입니다. 이는 올바른 결과입니다.

+0

내 행동에 문제가 생겼다. 아무리 나쁜 행동이라 할지라도. ;) – XQDev

0

때때로 우리는 정밀도의 한계를 지정해야 원하는 정밀도에 따라 값을 얻기 위해, 여기에서 잘 작동 내 코드, 그것은 도움이되기를 바랍니다 :

double minutes = 3; 
minutes = minutes/(24.0*60.0); 
double hours = 3; 
hours = hours/24.0; 
double days = 3; 
double age = days + hours + minutes; 
printf("%.8f",age);//here i have included the places of precision (.8) 
관련 문제