2013-01-02 3 views
0

기본적으로 나는 4 자리의 정밀도를 얻고 있으며 setprecision(6)을 사용할 때 변수의 마지막 자리는 1/3=0.333369과 같이 무작위로옵니다.C++에서 6 자리 정밀도의 float 값을 출력하는 방법은 무엇입니까?

+1

'float' 유형 자체가 제한적으로 보이므로 왜'double '을 사용하지 않으시겠습니까? 그러나이 유형조차도 한계가 있습니다. – fge

+2

완벽한 예제를 제공합니다 –

+0

@Potatoswatter IEEE 754 부동 소수점은 그처럼 작동하지 않습니다;) – fge

답변

4

float에는 24 자리의 이진수를 사용하여 숫자의 숫자를 저장하기 때문에 약 7 자리의 정밀도를 갖습니다. 출력과 관련하여 setprecision(6)은 요청할 수있는 모든 작업을 수행합니다.

비슷한 값을 가진 두 개의 숫자를 뺀 다음 결과를 인쇄하는 것과 같이 정확도가 떨어지는 것 같습니다. 빠른 해결책은 계산을 변경하여 double 또는 long double을 사용하는 것입니다. 그러나 부동 소수점 결과의 정밀도를 보장하려면 FP 작동 방식을 이해하고 수식 계산 방식을 분석해야합니다.

What Every Computer Scientist Should Know About Floating-Point Arithmetic을 참조하십시오.

관련 문제