对于Python的实值轨道模拟来说,数字太大了吗?

2024-09-27 00:20:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用真实值做一些重力模拟,但是当我试着把真实值放进去时,我得到了一个错误,上面写着“overflowerr:Python int太大,无法转换成C long”。在

这个值和太阳质量一样大(1.98e+30kg),我认为这并没有那么大(我希望今年晚些时候用Python进行黑洞模拟)。我尝试在Python2.7和Python3.4上运行代码,但遗憾的是,这两种方法都不起作用。在

我做了一些搜索,我发现大多数人在使用大xrange的方法时都会遇到这个错误,但事实并非如此(我使用的xrange最大的优点是0到1),而且程序在小质量的情况下工作得很好。在

我能做点什么吗?或者Python无法处理这些值(我觉得这不太可能)?在

整个回溯过程如下:

Traceback (most recent call last):
  File "Orbit2.py", line 166, in <module>
    main()
  File "Orbit2.py", line 155, in main
    pygame.draw.circle(win, (255, 255, 255), (int(WIDTHD2+zoom*WIDTHD2*(p._est._x-WIDTHD2)/WIDTHD2),int(HEIGHTD2+zoom*HEIGHTD2*(p._est._y-HEIGHTD2)/HEIGHTD2)),int(p._r*zoom), 0)
OverflowError: Python int too large to convert to C long

如果这对整个代码有帮助的话:

^{pr2}$

Tags: 方法代码inpy错误line质量long
1条回答
网友
1楼 · 发布于 2024-09-27 00:20:54

首先,您需要了解不同类型的合法值的范围。largest int on most system is 9.2e18。在大多数代码中,您都使用浮点数,所以这不是问题。但是,您可以在您发布的堆栈跟踪中看到,您在这里遇到了麻烦:

pygame.draw.circle(win, (255, 255, 255), (int(WIDTHD2+zoom*WIDTHD2*(p._est._x-WIDTHD2)/WIDTHD2),int(HEIGHTD2+zoom*HEIGHTD2*(p._est._y-HEIGHTD2)/HEIGHTD2)),int(p._r*zoom), 0)

我没有跟踪您发布的所有代码,以确定在那里计算的是什么或为什么,但可以说,其中两个对int()的调用之一正在计算一些非常大的值,并试图将其转换为int,但这行不通。我猜如果你在画圆圈,这不是你代码的核心部分(但是,我没有跟踪代码,也没有尝试将注释翻译成英语)-我猜这只是为了可视化。如果是这样的话,我建议把它们缩小到更小的尺寸。如果你缩放所有的东西,它在屏幕上看起来还是一样的,但是你可以在需要的地方使用整数运算。在

相关问题 更多 >

    热门问题