c++ remquo 求余数和商的函数为啥16除以2,在linux环境下商为0?
相同代码 windows环境 remquo 函数返回的商符合预期,16除以2商为8,虚拟机ubuntu环境 remquo函数返回的商不符合预期,16除以2商为0
2个平台运行结果
windows平台在vscode上跑,商的结果是8
在linux环境ubuntu20.04 直接用g++跑结果是0, g++版本是9.4.0
下面是代码
#include <iostream>
#include <cmath>
int main() {
float a = 16;
float b = 2;
int quo = 0;
float y = remquo(a, b,&quo);
std::cout << "quo:" << quo << std::endl;
return 0;
}
有没有大佬能帮忙解释这其中的原因,2个不同平台输出结果不一样,是什么原因导致的呢
remquo 得到的 quo 并不是商,而是商的符号位与最低 n 位 ( n ≥ 3 ) 。具体 n 是多少是由编译器 / 标准函数库决定的。所以不同的编译器会不同。
8 的最后三位正好是 0 。所以只保留 3 位的话就是 0 。如果保留了更多的话,就会是 8 。