thể trùng lặp:
Python rounding error with float numbers
python maths is wrongLỗi Python trong phép trừ cơ bản?
tôi không thể nhận Python để làm một cách chính xác các phép trừ 1-0,8 và gán nó. Nó tiếp tục với câu trả lời sai, 0.19999999999999996.
tôi khám phá một chút:
sq = {}
sub = {}
for i in range(1000):
sq[str(i/1000.)+'**2']=((i/1000.)**2)
sub['1-'+str(i/1000.)]=(1.0-(i/1000.))
và phát hiện ra rằng lỗi này xảy ra với một nhóm phần nào ngẫu nhiên của các phao nổi giữa 0 và 1 đến nơi thập phân thứ ba. Một lỗi tương tự cũng xảy ra khi bạn vuông những float đó, nhưng với một tập hợp con khác.
Tôi hy vọng giải thích về điều này và cách làm cho Python thực hiện quyền số học. Sử dụng round(x,3)
là công việc hiện tại tôi đang sử dụng, nhưng nó không thanh lịch.
Cảm ơn!
Đây là một phiên trong Python 2.7.3 shell:
*** Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32. ***
*** Remote Python engine is active ***
>>> 1-0.8
0.19999999999999996
>>> print 1-0.8
0.2
>>> a = 1-0.8
>>> a
0.19999999999999996
>>> print a
0.2
>>> a = 0.2
>>> print a
0.2
>>> a
0.2
>>>
Dưới đây là đoạn code tôi đưa vào một vài dịch viên trực tuyến:
def doit():
d = {'a':1-0.8}
return d
print doit()
và đầu ra:
{'a': 0.19999999999999996}
séc http://www.yoda.arachsys.com/csharp/floatingpoint.html – avasal
http://effbot.org/pyfaq/why-are -floating-point-calculate-so-inaccurate.htm –