Loading
Ho Sung Lee
This is a live streamed presentation. You will automatically follow the presenter and see the slide they're currently on.
8퍼센트 이호성
숫자 계산이 의도와 다른 이유와 대안
Python 공식문서를 찾아가며 문제 해결 하기
컴공과 첫 과목의 향수
Text
If two multiples are equally close, rounding is done toward the even choice.
Default 의 변경은 Python 3.0 부터 (What's New In Python 3.0)
왜 2.68이 되지 않는걸까?
The behavior of round() for floats can be surprising.
진법 | 표현 | 계산 |
---|---|---|
10진법 | 0.125 | 1/10 + 2/100 + 5/1000 |
2진법 | 0.001 | 0/2 + 0/4 + 1/8 |
Double-precision floating-point format
부호
지수
가수
진법 | 부호 | 지수 | 가수 | 계산 |
---|---|---|---|---|
10진법 | + | -1 | 1.0 | |
2진법 | + | -4 | 1.6 |
물론 1.6에 가까운 근사값 입니다.
Python 3.1 부터 가장 짧은 표현을 사용
(내가 의도한) 0.1이 (실제로 저장되는) 0.1이 아니라면서
왜 0.1을 보여주는 거죠?
같은수 인가?
출력해 보자
이미 값의 저장시에 오차가 발생 했기 때문에
정확한 비교를 할 수 없다.
언어의 문제가 아닙니다.
테스트시에는 unittest.TestCase.assertAlmostEqual 을 사용
round의 사용
isclose 사용
컴퓨터는 사람들이 학교에서 배우는 것과 동일한 연산 방식을 제공해야 한다.
이름 | 조건 |
---|---|
Inexact | 계산 결과가 정확하지 않을 때 |
Rounded | 유효숫자의 수가 줄어 들었을 때 |
FloatOperation | Decimal과 float가 함께 사용되었을 때 |
계산 과정에서 조건에 따라 Signal이 발생하고, 그 결과 관련된 flag를
설정하거나 trap(Exception)을 발생 시킵니다.
그 외에도 여러가지 Signal 이 있습니다.
의도되지 않은 연산이 일어났을 때 Exception 을 발생 시킨다.
Text
정확한 계산이 필요한 경우 decimal을 사용하자!
208B
4시