C++计算出现error C2124除零错误及整数除法结果异常求助
解答你的C++编程问题
嘿,我来帮你拆解这两个问题的根源,其实都是整数除法在搞鬼:
问题1:为什么会出现除零错误?
你代码里的6/45、5/44这类运算,两边都是整数字面量(比如6、45都是int类型),在C++中,两个整数相除会执行整数除法——直接舍弃小数部分,只保留整数结果。那6/45的结果就是0,后面的5/44也是0,以此类推,整个分母就变成了0*0*0*0*0*0=0,最后计算1/0自然就触发了除零错误(error C2124)。你以为用了极小数值,但实际上这些除法根本没产生小数,直接得到了0。
问题2:为什么5/2结果是2?
同样的道理,5/2是两个整数做除法,结果会被截断成整数2,之后才会把这个整数2赋值给double类型的x,所以你看到的结果是2,并不是x是int类型,而是运算过程本身是整数运算。
修正后的代码
只需要把其中一个操作数改成浮点数(比如加.0,或者用6.0代替6),就能触发浮点数除法:
#include<iostream> using namespace std; int main() { double x = 0.0; // 把参与除法的数改成浮点数,触发浮点数除法逻辑 x = 1.0 / ((6.0/45)*(5.0/44)*(4.0/43)*(3.0/42)*(2.0/41)*(1.0/40)); cout << "The number is : " << x << endl; system("pause"); return 0; }
或者更简洁一点,只需要让第一个除法变成浮点数,后面的运算会自动提升为浮点数:
x = 1.0 / ((6.0/45)*(5/44)*(4/43)*(3/42)*(2/41)*(1/40));
因为当一个浮点数和整数运算时,整数会被隐式转换为浮点数,这样后续的除法都会是浮点数除法,不会再得到0了。
内容的提问来源于stack exchange,提问作者PrOfSeS
相关产品推荐
相关产品推荐

