精确的Python 2.7计算包括Pi

时间:2016-10-18 17:03:40

标签: python python-2.7 math

我正在研究一个计算与轨道力学相关的不同事物的小程序,例如轨道的半长轴,速度等。(这个主题没有经验需要回答这个问题。)

一切顺利,直到我试图计算轨道周期(我不得不使用Pi的公式):

T =2π√a 3 (Click for image)

T 时间时间 a 半长轴 μ标准引力参数

现在,我的问题是我的程序不能非常精确地计算它,因为公式的结果有点偏;例如:海拔160公里的圆形轨道需要大约88分钟,但我的程序告诉我大约90分37秒。

我的代码:

#the standard gravitational parameter of the Earth
gravPara = 3.986004418*10**14

#the semi-major axis of the orbit (the radius of the Earth + the apoapsis and periapsis of your orbit / 2)
semiMajor = (bodyDia + ap + pe) / 2

#formula to calculate orbital period
timeSeconds = (2 * math.pi) * math.sqrt(semiMajor**3 / gravPara)

#making the result appear as minutes and seconds instead of just seconds
timeMinutes = 0
while (timeSeconds > 60):
   timeSeconds = timeSeconds - 60
   timeMinutes = timeMinutes + 1

#round the variable to store seconds
round(timeSeconds, 0)

#print the result
print timeMinutes
print timeSeconds

所以我的问题是:我的代码中是错误,还是math.pi在这样的公式中一起使用时不是很精确?我应该将它存储为浮动并使用浮点数,还是应该将计算分成多个部分?

如果你能帮我解决这个问题,我将非常感激,因为搜索Python参考资料以及其他论坛并没有让我走得太远。

PS:使用print math.pi时,它返回精确的Pi值,因此math.pi函数似乎正常工作。

2 个答案:

答案 0 :(得分:1)

math.pi是一个包含15位小数的浮点数:3.141592653589793

根据chepners评论您的原始帖子,这相当于计算球体大小时的原子大小。

所以回答你的问题:它不是math.pi

答案 1 :(得分:0)

好的 - 好像我找到了问题的解决方案;在编辑我的问题以包括我对变量 semiMajor 的计算时,我意识到我忘了在bodyDia + ap + pe周围加上括号,这导致错误的优先级排序,导致计算不太精确。 / p>

所以这在我的代码中只是一个愚蠢的错误,并且通过添加两个括号很容易解决。 感谢您抽出宝贵时间。