- 此问题在此处已有答案**:
Python and C++ modulus(3个答案)
2天前关闭。
在C++中,以下代码:
#include <math.h>
#include <iostream>
int main() {
std::cout << remainder(-177.14024960054252, 360) << std::endl;
}
使用x86 - 64 GCC 12.2(https://godbolt.org/z/43MzbE1ve)编译
输出:
-177.14
但是在Python中:
np.remainder(-177.14024960054252, 360)
# and
-177.14024960054252 % 360
两个输出:
182.85975039945748
根据numpy文档,np.remainder
正在执行IEEE余数函数。根据C++文档,remainder
也正在执行IEEE余数函数。
为什么这两个数字不同?
1条答案
按热度按时间qojgxg4l1#
因为
np.remainder
没有使用IEEE余数函数。引用docs:
计算
floor_divide
函数的余项。它等效于Python取模运算符x1 % x2
,并且符号与除数x2
相同。等效于np.remainder
的MATLAB函数为mod。它也有一个警告,声明它与Python 3.7的
math.remainder
和C的余数不同。这不应与以下内容混淆:
Python 3.7的
math.remainder
和C的余数,后者计算IEEE余数,它们是round(x1 / x2)
的补数。MATLAB rem函数和/或作为
int(x1 / x2).
补数的C %运算符关于Python的
%
和C语言的%
的区别,参见here。