2014-12-30 3 views
0

나는 정밀도가 높아지면 더 정확한 결과를 얻어야 함을 이해합니다. 그러나 내가 정밀도를 증가이 예는 매우 명확하지 않다, 그러나 나는 올바른 결과를 얻고 있지 않다 :두 배 사용시 정밀도와 정확성

이 출력은
#include <iostream> 
#include <iomanip> 
int main() 
{ 
    using namespace std; 
    cout << setprecision(17); 
    double dValue; 
    dValue = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1; 
    cout << dValue << endl; 
} 

0.99999999999999989

누군가가 이런 일이 왜 나를 설명 할 수 있습니까?

+2

사용중인 프로그래밍 언어는 C++입니다. –

+0

IEEE 754 표준을 살펴보십시오. http://en.wikipedia.org/wiki/Double-precision_floating-point_format, 컴퓨터는 0.1과 같은 것을 볼 수 없습니다. 가장 가까운 2 진수입니다 (간단한 청사진 예제 2^-3 = 0.128d). 부동 소수점 수에 대한 계산을 할 때 정확한 결과를 얻지 못합니다. – Nabuchodonozor

답변

0

정밀도를 높이면 더 정확한 결과를 얻을 수 없습니다. 출력하고자하는 소수점 이하 자릿수로 형식을 지정합니다. "오류"는 컴퓨터가 찾고있는 정밀도 수준을 정확하게 나타낼 수 없다는 것과 관련이 있습니다.

+0

화면에 1000000 자리 숫자를 인쇄 할 수없는 이유는 무엇입니까? 왜 무능력은 거기에 오는가? – user3891236

+0

@ user3891236 위의 제공된 링크 및 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html을 읽으십시오. 왜 화면의 문자 수가 변수의 비트 수와 관련이 있다고 생각합니까? 또는 일부 이진 계산을 시도하십시오. 십진수 0.1은 * infinte * 길이의 이진수입니다 ... – deviantfan