编程语言
首页 > 编程语言> > c – 更改非正数除法的python数学模块行为

c – 更改非正数除法的python数学模块行为

作者:互联网

在c和python编程语言中,非正数除法是完全不同的:

//c++:
11 / 3 = 3
11 % 3 = 2
(-11) / 3 = -3
(-11) % 3 = -2
11 / (-3) = -3
11 % (-3) = 2
(-11) / (-3) = 3
(-11) % (-3) = -2

所以,正如你所看到的,c是最小化商.
但是,python的行为如下:

#python
11 / 3 = 3
11 % 3 = 2
(-11) / 3 = -4
(-11) % 3 = 1
11 / (-3) = -4
11 % (-3) = -1
(-11) / (-3) = 3
(-11) % (-3) = -2

我不能将我自己的除法函数编码为c,因为我会用它来检查c计算器程序,而python不支持中缀运算符.我可以在简单的方式划分整数时使python表现得像c一样吗?例如,设置一些标志或类似的东西?

解决方法:

正如Thomas K所说,使用math.fmod作为模数,或者如果你真的想要你可以自己定义它:

def cmod(x, y):
    return abs(x) % abs(y) * (1 if x > 0 else -1)

而且这个函数应该模拟C风格的划分:

def cdiv(x, y):
    return abs(x) / abs(y) * cmp(x, 0) * cmp(y, 0)

你说你必须使用/和%运算符.这是不可能的,因为您无法覆盖内置函数的运算符.但是,您可以定义自己的整数类型和运算符重载__div__和__mod__运算符.

标签:python,c-2,integer-division
来源: https://codeday.me/bug/20190521/1148475.html