gpt4 book ai didi

c++ - 如何检查商是否为整数? C++

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:39 27 4
gpt4 key购买 nike

我是初学者,我正在寻找一种方法来检查 C++ 中的商是否为整数。

例如:

int a;
double b;
cin >> a;
b = a / 4;

我怎么知道 b 不是整数(类似于 5/4=1.25)?

最佳答案

在像 C 这样的语言中,当声明一个整数类型的变量时,其中的值总是一个整数。但是我猜你问的是,如何检查计算结果是否为整数值。如果您使用整数类型进行算术运算,最简单的理解方法是执行逆运算并测试结果是否与原始输入匹配。

编辑 如果两个操作数都是整数类型(如问题编辑之前),那么您可以这样做:

b = a / 4;
if( b*4 == a ){
cout << "a/4 is integer";
}

但是还有其他方法可以做到这一点。例如,使用余数运算符 %(经常与模数混淆——或者更确切地说是误称)。在许多 CPU 架构上,执行除法的操作也会给出余数。这个

b = a / 4;
if( b%4 == 0 ){
cout << "a/4 is integer";
}

将接近最优,因为单个 CPU 指令将执行两个计算(在前两行),并且如果没有余数,比较通常会测试由除法运算设置的特殊标志。

*但是如果浮点运算进入图片(如问题编辑后如何),事情会变得有点麻烦。您无法再进行反转测试,因为浮点运算不精确¹。

如果您只对余数/模数感兴趣,最好的办法是使用 fmod 函数,然后测试结果是否在精度误差 epsilon 范围内。

if( DBL_EPSILON > fmod(a, 4) ){
cout << "a/4 is integer (within double floating point precision)";
}

如果您同时需要商和余数,那么我首选的方法是截断和减法(通常速度更快):

double b = a/4.;
double b_r = b - trunc(b);
if( DBL_EPSILON > fabs(b_r) ){
cout << "a/4 is integer (within double floating point precision)";
}

1:对于所涉及的大多数数字;有一组数字,当用于浮点算术运算时将产生精确的结果。但这只是 float 可表示的所有数字的一小部分。

关于c++ - 如何检查商是否为整数? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49220664/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com