C++余数与NumPy/Python余数的区别[重复]

xn1cxnb4  于 2023-03-05  发布在  Python
关注(0)|答案(1)|浏览(118)
    • 此问题在此处已有答案**:

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余数函数。
为什么这两个数字不同?

qojgxg4l

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

相关问题