>> (x + 4 - 1) // 4 floor(x/4 + 3/4) 如果我们将-6ren">
gpt4 book ai didi

python - Sympy 中的整数运算

转载 作者:太空宇宙 更新时间:2023-11-03 11:19:25 26 4
gpt4 key购买 nike

我正在尝试将整数 x 除以常数:

>>> x = sympy.Symbol("x", integer=True)
>>> (x + 4 - 1) // 4
floor(x/4 + 3/4)

如果我们将此从 sympy 的上下文中取出,则在假设整数算术时表达式是不正确的。例如,在 python 2.7 中:

>>> floor(9/4 + 3/4)
2.0

我想要的是一个表达式,当在不同的上下文中计算时,它会产生所需的 (9 + 3)/4 = 3

目前的解决方案:

sympy.Mul(x + 4 - 1, sympy.Pow(4, -1), evaluate=False)
sympy.factor((x + 4 - 1) / 4)

虽然它们都给出了所需的 (x + 3)/4,但它们必须针对每个表达式显式完成。

我正在寻找类似的东西:

>>> sympy.assume_integer()
>>> (x + 4 - 1) // 4
(x + 3) / 4

上下文:我们的项目使用 SymPy 生成 C++,因此我们从 sympy 表达式生成一个 string,它需要在整数运算下正确计算。尽管 floor(x/4 + 3/4).subs(x, 9) 确实产生 3,但这不是我们将在其中计算表达式的上下文。


答案here建议类似以下内容:

>>> ((x+4-1-(x+4-1)%4)/4)      
x/4 - Mod(x + 3, 4)/4 + 3/4

与上面有同样的问题,即 3/4 不是整数。

最佳答案

如果你想生成 C++ 代码,你应该使用 SymPy’s code printers ,这是专门为此目的而设计的。例如:

from sympy.abc import x
from sympy.printing import cxxcode

expr = (x+3)//4
print(cxxcode(expr))
# 'floor((1.0L/4.0L)*x + 3.0L/4.0L)'

将其插入到 C++ 代码中:

# include <stdio.h>
# include <math.h>

int main()
{
int x = 9;
printf("%Lf\n", floor((1.0L/4.0L)*x + 3.0L/4.0L));
}

这会产生 3.000000。如果需要,您需要 convert the result to an integer .

关于python - Sympy 中的整数运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45997001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com