SymPy 的 'expand' 函数的精度是多少?

What is the Precision of SymPy's 'expand' Function?

我正在尝试展开 (X + Y + Z) ^ N 形式的函数,其中 N 足够大,以便展开后的乘积将包含系数远大于 2 ^ 64 的项;为了便于讨论,我们只说 N 大于 200。这是一个问题,因为我希望对该函数的扩展形式进行分析,并且该分析需要所有项及其系数的精确精度.

为了扩展我正在使用 Python 模块 SymPy 的功能,到目前为止它看起来非常有前途并且能够在相对较短的时间内扩展 N > 150 的功能.不过,我担心的是,在查看了一些扩展函数后,我发现系数的尾随零比我预期的要多。我知道在函数扩展后我可以通过 mpmath 运行 进行分析,但到目前为止,我不确定一些较大的系数是否完全正确第一名。

在 SymPy 的 expand 函数的 documentation 下,没有说明在处理非常大的数字时展开系数的精确度。我知道 SymPy 的某些功能使用 mpmath 模块,所以我知道它能够实现任意精度,我只是不知道任意精度是否明确适用于这种情况.

我知道我还可以通过对给定函数的所有系数求和并检查该总和是否等于 N 来确认 expand 函数是否任意精确,但我' d 而不是花几个小时编写所有必要的部分来进行评估,结果发现 expand 不精确。

如果有人有任何更简单的方法来确认 expand 的精度,那么如果不能直接确认其精度,我将不胜感激。

虽然PR 18960还没有合并,但是你可以在那里确认系数是正确的:

>>> multinomial(15,16,14)
50151543548788717200
>>> ((x+y+z)**(15+16+14)).expand().coeff(x**15*y**16*z**14)
50151543548788717200
>>> _ > 2**64
True

由于Python支持无限整数且系数是整数,我不知道有什么原因它们不准确。