2012-12-25 4 views
1
의 합을 예측

가능한 중복 :
Is JavaScript’s Floating-Point Math Broken?두 배로

이 매우 초보적인 COMP-공상 과학의 문제가 될 것입니다. 다음 C#을 생각해 봅시다 (JS에 대해서도 마찬가지입니다. 수학이 복식과 함께 작동하는 것으로 가정합니다).

var i = .01; 
i+=.01; //i=.02 
i+=.01; //i=.03 
i+=.01; //i=.04 
i+=.01; //i=.05 
i+=.01; //i=.0600000000005 (I may have added/missed a few 0s in there) 
i+=.01; //i=.07 
i+=.01; //i=.08 
i+=.01; //i=.09 
i+=.01; //i=.0999999999992 (I may have added/missed a few 9s in there) 

그래서 무슨 일이 일어나고 어떻게 i + .01의 ​​합계를 정확하게 예측할 수 있습니까?

+2

다음 내용을 읽고 도움이되는지 확인하십시오. http://csharpindepth.com/Articles/General/FloatingPoint.aspx –

+2

실제로 어떤 문제를 해결하려고합니까? 중요도가 낮은 십진수 값이 중요 할 경우, 처음에는'double'을 사용하면 안됩니다. 'decimal' 또는 유사한 구문을 사용하십시오. – CodesInChaos

+0

@CodesInChaos 제 목표는 0에서 x 사이의 간격을 매 간격으로 얻는 것입니다. 나는 어떤 분열을하면서 그 주위를 연구했지만, 수학이 어떻게 두배로 작동하는지 이해하고 싶다. JonSkeet, 지금보세요. 감사. – Billdr

답변

0

double은 숫자에 소수점을 사용하는 단순한 방법이 아닙니다. 부동 소수점 연산을 사용합니다. This article by Pete Becker은 어떻게 작동하는지 잘 설명합니다.