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