Trong khi lập trình, tôi nhận thấy sự khác biệt giữa kết quả của math.exp (2) và math.e ** 2. Như bạn có thể thấy dưới đây, sự khác biệt này không phát sinh khi tính e^1.Sự khác biệt giữa math.exp (2) và math.e ** 2
Không phải là một lập trình viên có kinh nghiệm, tôi tự hỏi tại sao điều này lại khác biệt? Tôi cho rằng nó có liên quan đến việc làm tròn. Tài liệu trăn nói rằng math.exp(x)
trả lại e**x
, nhưng điều này dường như không chính xác. Vậy hoạt động của math.exp(x)
khác với math.e**x
như thế nào?
>>> math.exp(1)
2.718281828459045
>>> math.e**1
2.718281828459045
>>> math.exp(1)==math.e**1
True
>>> math.exp(2)
7.38905609893065
>>> math.e**2
7.3890560989306495
>>> math.exp(2)==math.e**2
False
>>> math.exp(100)
2.6881171418161356e+43
>>> math.e**100
2.6881171418161212e+43
>>> math.exp(100)==math.e**100
False
Related: http://stackoverflow.com/a/15322395/1639625 Đoán của tôi: 'math.exp' được thực hiện trong' c' (hoặc thậm chí trong phần cứng) và do đó có hành vi điểm nổi hơi khác nhau. –
Bỏ phiếu để mở lại. Có nhiều điều xảy ra ở đây hơn là chỉ đơn giản là "dấu phẩy động là không chính xác". Đặc biệt, khi hai câu trả lời giải thích, có những lý do tốt để mong đợi 'exp (x)' chính xác hơn 'e ** x'. –