나는 파이썬 2.7이 릴리스 된 직후부터 사용 해왔다. 나는 최근에 2.7에 문제가있어서 필요한 모든 것을하지 않았기 때문에 마지막으로 업데이트했다. 그러나, 며칠 후, 나는 곱셈과 관련된 몇 가지 문제에 주목하고 있습니다. 하지만 내가하고있는 일이나 파이썬 자체에 문제가 있습니까?파이썬 곱셈 오류 (버전 3.4)
>>> 12*0.1
1.2000000000000002
이 같은 루프 실행하는 경우 :
>>> for i in range (-20, 20):
... print (i, i*.1)
...
출력은을 :
-20 -2.0
-19 -1.9000000000000001
-18 -1.8
-17 -1.7000000000000002
-16 -1.6
-15 -1.5
-14 -1.4000000000000001
-13 -1.3
-12 -1.2000000000000002
-11 -1.1
-10 -1.0
-9 -0.9
-8 -0.8
-7 -0.7000000000000001
-6 -0.6000000000000001
-5 -0.5
-4 -0.4
-3 -0.30000000000000004
-2 -0.2
-1 -0.1
0 0.0
1 0.1
2 0.2
3 0.30000000000000004
4 0.4
5 0.5
6 0.60000000000000001
7 0.70000000000000001
8 0.8
9 0.9
10 0.10
11 0.11
12 0.120000000000000002
13 0.13
14 0.140000000000000001
15 0.15
16 0.16
17 0.170000000000000002
18 0.18
19 0.190000000000000002
나는 그러나이 같은 루프를 수행 할 때 :
>>> for i in range (-20, 20):
... print (i, i/10)
...
을 올바른 숫자가 인쇄됩니다. 나는 심지어 첫 번째 루프를 +/- 1,000,000의 범위로 돌렸고, 숫자의 약 40 %가 이런 식으로 끝납니다. 왜 이런 일이 일어나는 걸까요?
플로트는 본래부터 정확하지 않습니다. 정확한 결과를 원하면'fractions' 모듈을 고려하십시오. – Kevin
3.x, btw와 관련이 없습니다. 나는 2.7에서 당신의 코드를 시도 할 때'1.2000000000000002'를 얻는다. – Kevin
[부동 소수점 연산이 깨졌습니까?] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – MattDMo