STIKA 2024. 3. 15. 14:49

24.03.15 Fri

 

 

❤️ TIL [45]

Today I Learned


✏️ 작업 내용

✔️ 

✔️ 


✔️ 두둥

    public decimal currentStage;
    public decimal growRatio;

부동소수점오류나서 currentStage에 6.99999가 들어감

decimal 

쓰기로함

이렇게 나오는 원인은 근사치로 계산 되는 부동 소수점 때문이다.

 

100-64.1부터 근사치가 되는 이유는?

64.1은 십진수에서는 정확한 수이지만, 이진수에서는 정확하게 표현할 수 없는 수이다. 따라서 부동 소수점으로 표현할 때 근사치가 된다.

즉, 64.1을 이진수로 변환하면 1000000.0001100110011001100110011001100110011001100110011010...과 같이 무한 소수가 된다. 이진수에서는 유한한 비트 수로 표현하므로, 64.1을 정확히 표현할 수 없다. 따라서 100-64.1은 35.900000000000006과 같이 부동 소수점에 근사치로 계산된다.

 

부동 소수점

부동 소수점은 소수점 이하의 값을 가지는 실수를 컴퓨터에서 표현하는 방법 중 하나이다. 컴퓨터에서는 이진수로 실수를 표현하기 때문에, 부동 소수점은 이진 소수점으로 표현된다.

부동 소수점은 실수형 변수에 저장되며, 소수점 이하의 값을 가질 수 있다. 예를 들어, 3.14와 같은 실수는 부동 소수점으로 표현된다.

 

그러나 컴퓨터에서는 부동 소수점을 정확하게 표현하는 것이 불가능하다. 부동 소수점 연산에서는 정확도 문제가 발생할 수 있으며, 이러한 문제는 부동 소수점이 어떻게 표현되는지와 관련이 있다. 부동 소수점은 이진수로 표현되기 때문에, 소수점 이하의 값이 무한히 반복될 수 있다. 따라서 일부 실수값은 정확하게 표현할 수 없고, 근사치로 표현된다.

 

C#에서 부동 소수점

C#에서 부동 소수점은 실수형 데이터 타입인 float와 double로 표현된다. float는 32비트, double은 64비트의 메모리를 사용하여 실수를 표현한다.

C#에서 부동 소수점 연산을 수행할 때는 위에 부동 소수점에 대해 설명한 바와 같이, 부동 소수점은 이진수로 표현되기 때문에 소수점 이하의 값이 무한히 반복될 수 있는, 예를 들어, 0.1과 같은 십진수는 이진수로 정확하게 표현할 수 없으며, 근사치로 표현하는 것과 같이 부동 소수점 정확도 문제에 대해 주의해야 한다. 

부동 소수점 정확도 문제를 최소화하기 위해서는 적절한 자리수에서 반올림하는 등의 방법을 사용하거나, 정수형으로 변환해 문제를 해결할 수 있다. 또한, C#에서는 Decimal이라는 부동 소수점 정확도 문제를 해결하기 위한 128비트 실수형 데이터 타입도 제공된다.

출처: https://jasmintime.com/453 [Jasmin Time:티스토리]

 

 

농사구현  및 정리


📝 오늘의 마무리

 


 

✏️ 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기

✏️ TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기

✏️ 꾸준히 기록을 남기는 습관 가지기