Độ chính xác của phân số Python

OP đã không đăng ký kể từ tháng 7, nhưng điều này có thể hữu ích cho họ. số thập phân. số học dấu phẩy động với độ chính xác tùy ý cho micropython. Tuy nhiên, nó vẫn sẽ yêu cầu một số công việc để theo dõi quy ước về độ chính xác bằng 0 ở cuối.

Stefan Sonnenberg-Carstens

2010-11-18 19. 08. 00 UTC

liên kết cố định


Tôi thực hiện đánh giá đệ quy một biểu thức liên quan đến phân số và
không có gì ngạc nhiên khi tử số và mẫu số tăng lên khá nhanh
Sau 10-20 lần lặp, số chữ số ở tử số và
mẫu số (dưới dạng số nguyên) đạt 80-100. Và tôi đang tự hỏi cho đến khi những gì
điểm tôi có thể tin tưởng vào kết quả vì tôi đang sử dụng phân số. Phân số cho
toàn bộ thủ tục. Là độ chính xác vô hạn của Fraction?
một số loại ngoại lệ nếu python không thể đại diện cho
tử số và/hoặc mẫu số là số nguyên?
http. //www. con trăn. org/dev/peps/pep-3141/ không hữu ích lắm trong việc này
liên quan cũng không phải là http. // tài liệu. con trăn. org/thư viện/phân số. html
Bất kỳ ý tưởng?
Chúc mừng,
Đa-ni-ên

Tôi không chắc bạn thực sự muốn biết điều gì
Phân số, theo định nghĩa toán học của chúng, có độ chính xác không giới hạn
Ví dụ, PI/2 là chính xác (với độ chính xác vô tận vì PI là một
số siêu việt),
nhưng 3. 1415926/2 (biểu diễn thập phân) không
Vậy là phân số. Phân số (1,3) có độ chính xác không giới hạn, do đó mang lại điều này

từ phân số nhập Phân số


one_tenth=Phân số(1,10)
a = one_tenth+one_tenth
a

Phân Số(1, 5)


a = one_tenth+one_tenth+one_tenth
a

Phân Số(3, 10)


one_tenth=1. 0/10
a = one_tenth+one_tenth
a

0. 2


a = one_tenth+one_tenth+one_tenth
a

0. 30000000000000004
(lỗi này là do biểu diễn bên trong của số float dưới dạng nhị phân
số, xem Không. 14 trong hướng dẫn Python)


Tôi nghĩ bạn thực sự muốn biết, tử số/mẫu số có thể lớn đến mức nào
Vì python có hỗ trợ bignum (type=long), giới hạn duy nhất là giới hạn của bạn
hệ thống bộ nhớ ảo
cung cấp, hầu như luôn luôn xấp xỉ. dung lượng ram


từ thập phân nhập Thập phân
one_tenth=Phân số(1,10)
ba_mười = một_mười*3
d = Thập phân(ba_mười. tử số)/Số thập phân(ba_mười. mẫu số)
d

Thập phân('0. 3')

Toán tử '/' (__div__) được ghi đè đúng cách

Bạn thậm chí có thể điều chỉnh độ chính xác getcontext(). prec bằng cách đặt nó thành một
Giá trị cao hơn

Chúc mừng

-------------- phần tiếp theo --------------
Tệp đính kèm không phải văn bản đã được xóa
Tên. stefan_sonnenberg. vcf
Loại. văn bản/x-vcard
Kích thước. 223 byte
giảm xuống. Không có sẵn
URL. < http. //thư. con trăn. org/pipermail/python-list/attachments/20101118/29a6cd73/attachment. vcf>

Steven D'Aprano

2010-11-19 04. 26. 28 UTC

liên kết cố định

Nó thực sự ngược lại. Số thập phân có nhiều ưu điểm, nhưng
"thực sự chính xác" không phải là một trong số họ. Nó bị các vấn đề chính xác tương tự lại
độ chính xác và làm tròn dưới dạng dấu phẩy động nhị phân

Dễ dàng chứng minh rằng có những số không thể
được biểu diễn chính xác dưới dạng Số thập phân cho dù bạn có bao nhiêu chữ số thập phân
sử dụng, nhưng có thể được biểu diễn chính xác dưới dạng Phân số. Phân số có thể chính xác
đại diện cho mọi số thập phân, nhưng số thập phân không thể đại diện chính xác cho mọi
phân số

Chúng tôi cũng không nói về những trường hợp cạnh kỳ lạ, mà là những con số đơn giản

từ thập phân nhập Thập phân
one_ninth = Số thập phân(1)/Số thập phân(9)
two_thirds = Số thập phân(2)/Số thập phân(3)
one_ninth*6 == two_thirds

Sai

từ phân số nhập Phân số
one_ninth = Phân số(1, 9)
two_thirds = Phân số(2, 3)
one_ninth*6 == two_thirds

Thật


Vẫn không thuyết phục?

f = Phân số(1) + Phân số(1, 10**100000)
f. = 1

Thật

(Nhân tiện, gần như tức thời)

d = Số thập phân(1) + Số thập phân(1)/Số thập phân(10**100000)
đ. = 1

Sai


Có, tôi có thể thử đặt ngữ cảnh Thập phân thành 100.000 chữ số thập phân --
và dễ dàng đánh bại nó một lần nữa bằng cách cộng thêm một vào số mũ

Theo tôi, mô-đun Phân số là một trong những mô-đun ít được đánh giá cao nhất và
các mô-đun ít được sử dụng trong thư viện tiêu chuẩn -- và tôi tự đưa mình vào
cái đó. Nó thực sự là một niềm vui, và tôi không sử dụng nó ở bất cứ đâu gần đủ

--
steven

RJB

2010-11-19 15. 29. 59 UTC

liên kết cố định

Phân số có loại bỏ các thừa số chung theo cách bình thường không?

Nếu có và bạn muốn tìm phân số gần nhất với nhỏ hơn
mẫu số tôi nghĩ bạn sẽ cần một số lý thuyết số và tiếp tục
phân số

RJB
Ngày 18/11/8. 26?pm, Steven D'Aprano


Nó thực sự ngược lại. Số thập phân có nhiều ưu điểm, nhưng
"thực sự chính xác" không phải là một trong số họ. Nó bị các vấn đề chính xác tương tự lại
độ chính xác và làm tròn dưới dạng dấu phẩy động nhị phân
Dễ dàng chứng minh rằng có những số không thể
được biểu diễn chính xác dưới dạng Số thập phân cho dù bạn có bao nhiêu chữ số thập phân
sử dụng, nhưng có thể được biểu diễn chính xác dưới dạng Phân số. Phân số có thể chính xác
đại diện cho mọi số thập phân, nhưng số thập phân không thể đại diện chính xác cho mọi
phân số
Chúng tôi cũng không nói về những trường hợp cạnh kỳ lạ, mà là những con số đơn giản

từ thập phân nhập Thập phân
one_ninth = Số thập phân(1)/Số thập phân(9)
two_thirds = Số thập phân(2)/Số thập phân(3)
one_ninth*6 == two_thirds

Sai

từ phân số nhập Phân số
one_ninth = Phân số(1, 9)
two_thirds = Phân số(2, 3)
one_ninth*6 == two_thirds

Thật
Vẫn không thuyết phục?

f = Phân số(1) + Phân số(1, 10**100000)
f. = 1

Thật
(Nhân tiện, gần như tức thời)

d = Số thập phân(1) + Số thập phân(1)/Số thập phân(10**100000)
đ. = 1

Sai
Có, tôi có thể thử đặt ngữ cảnh Thập phân thành 100.000 chữ số thập phân --
và dễ dàng đánh bại nó một lần nữa bằng cách cộng thêm một vào số mũ
Theo tôi, mô-đun Phân số là một trong những mô-đun ít được đánh giá cao nhất và
các mô-đun ít được sử dụng trong thư viện tiêu chuẩn -- và tôi tự đưa mình vào
cái đó. Nó thực sự là một niềm vui, và tôi không sử dụng nó ở bất cứ đâu gần đủ
--
steven

Tại sao 0. 1 0. 2 không phải là 0. 3 con trăn?

Trong bài viết này, chúng ta sẽ xem tại sao 0. 3 – 0. 2 không bằng 0. 1 trong Python. Lý do đằng sau nó được gọi là “độ chính xác” và đó là do máy tính không tính toán ở dạng Thập phân mà ở dạng Nhị phân . Máy tính không sử dụng hệ thống cơ sở 10, chúng sử dụng hệ thống cơ sở 2 (còn gọi là mã nhị phân). Dưới đây là Thực hiện.

Python có thể xử lý các phân số không?

Từ Python 3. 2 trở đi, bạn cũng có thể xây dựng một thể hiện Phân số trực tiếp từ số thập phân .