簡體   English   中英

python中方程的錯誤答案

[英]Wrong answer with equation in python

Wolphram Alpha一起嘗試-這是正確的結果。

嘗試使用python 2.7.x:

u = 4/3 * 6.67*1e-11*3.14*6378000*5515
print (u)  

答案將是7.36691253546

這里有什么不對?

整數除法。 四舍五入后, 4/3取值為1。

使用4.0代替強制浮點運算:

>>> 4.0/3 * 6.67*1e-11*3.14*6378000*5515
9.822550047279998

或使用默認為浮點除法的Python 3,或使用from __future__ import division在Python 2中實現相同功能:

Python 2.7.5 (default, May 22 2013, 12:00:45) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import division
>>> 4/3 * 6.67*1e-11*3.14*6378000*5515
9.822550047279998

此行為記錄在“ 二進制算術運算符”部分下

/ (除法)和// (地板除法)運算符產生其參數的商。 首先將數字參數轉換為通用類型。 普通或長整數除法會產生相同類型的整數; 結果是對結果應用了“底數”函數的數學除法運算。 除以零會引發ZeroDivisionError異常。

有關為什么在Python 3中更改了此行為的信息,請參見PEP 238 ,以獲取對from __future__ import division語句的引用。

問題是Python 2.7中的整數除法4/3

>>> print (4.0/3) * 6.67*1e-11*3.14*6378000*5515
9.82255004728

在Python 3中(其中/是浮點除法, //是整數除法)在不將其更改為4.0/3情況下可以正常工作,或者可以使用

from __future__ import division

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM