GNU C 库具有函数drem
(别名remainder
)。
如何仅使用Google App Engine Python 2.7 运行时支持的模块来模拟此功能?
来自GNU手册drem
:
这些函数很相似
fmod
,只是它们将内商 n 舍入到最接近的整数,而不是向零舍入到整数。例如,drem (6.5, 2.3) 返回 -0.4,即 6.5 减去 6.9。
来自GNU手册fmod
:
这些函数计算分子除以分母的余数。具体来说,返回值为分子 - n * 分母,其中 n 是分子除以分母的商,向零舍入为整数。因此,fmod (6.5, 2.3) 返回 1.9,即 6.5 减去 4.6。
阅读文档,以下 Python 代码应该可以工作:
def drem(x, y):
n = round(x / y)
return x - n * y
但是对于 Pythondrem(1.0, 2.0) == -1.0
和 C drem(1.0, 2.0) == 1.0
。注意 Python 返回负一,C 返回正一。这几乎可以肯定是舍入浮点数的内部差异。据我所知,这两个函数的执行方式相同,否则参数2 * x != y
。
如何使我的 Pythondrem
函数与其 C 等效函数一样工作?