Bạn không thể giải quyết nó. Đơn giản answer1.sum()==0
, và bạn không thể thực hiện phép chia cho số không.
Điều này xảy ra vì answer1
là cấp số nhân của 2 số âm, rất lớn, do đó kết quả được làm tròn thành 0.
nan
được trả về trong trường hợp này vì phép chia cho số không.
Bây giờ để giải quyết vấn đề của bạn, bạn có thể:
- đi tìm thư viện dành cho toán học có độ chính xác cao, như mpmath . Nhưng điều đó kém vui hơn.
- như một sự thay thế cho một vũ khí lớn hơn, hãy thực hiện một số thao tác toán học, như chi tiết bên dưới.
- sử dụng một
scipy/numpy
chức năng phù hợp để thực hiện chính xác những gì bạn muốn! Kiểm tra câu trả lời của @Warren Weckesser.
Ở đây tôi giải thích cách thực hiện một số thao tác toán học hữu ích cho vấn đề này. Chúng tôi có điều đó cho tử số:
exp(-x)+exp(-y) = exp(log(exp(-x)+exp(-y)))
= exp(log(exp(-x)*[1+exp(-y+x)]))
= exp(log(exp(-x) + log(1+exp(-y+x)))
= exp(-x + log(1+exp(-y+x)))
ở trên x=3* 1089
và y=3* 1093
. Bây giờ, đối số của cấp số nhân này là
-x + log(1+exp(-y+x)) = -x + 6.1441934777474324e-06
Đối với mẫu số, bạn có thể tiến hành tương tự nhưng lấy giá trị đó log(1+exp(-z+k))
đã được làm tròn thành 0
, để đối số của hàm mũ ở mẫu số được làm tròn thành -z=-3000
. Sau đó, bạn có kết quả của bạn là
exp(-x + log(1+exp(-y+x)))/exp(-z) = exp(-x+z+log(1+exp(-y+x))
= exp(-266.99999385580668)
vốn đã rất gần với kết quả mà bạn sẽ nhận được nếu chỉ giữ lại 2 số hạng đứng đầu (tức là số đầu tiên 1089
ở tử số và số đầu tiên 1000
ở mẫu số):
exp(3*(1089-1000))=exp(-267)
Vì lợi ích của nó, chúng ta hãy xem chúng ta đang ở gần như thế nào với giải pháp của Wolfram alpha ( liên kết ):
Log[(exp[-3*1089]+exp[-3*1093])/([exp[-3*1000]+exp[-3*4443])] -> -266.999993855806522267194565420933791813296828742310997510523
Sự khác biệt giữa số này và số mũ ở trên là +1.7053025658242404e-13
, vì vậy xấp xỉ chúng tôi thực hiện ở mẫu số là ổn.
Kết quả cuối cùng là
'exp(-266.99999385580668) = 1.1050349147204485e-116
Từ wolfram alpha là ( liên kết )
1.105034914720621496.. × 10^-116
và một lần nữa, nó cũng an toàn để sử dụng numpy ở đây.