作业帮 > 综合 > 作业

计算机算出的负数的商和余数,怎么和定义不同?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 05:12:57
计算机算出的负数的商和余数,怎么和定义不同?
按理负数商和余数的定义应该是这样啊.
为啥C语言的负数的余数还是负数啊?
在计算机语言里面,余数是和被除数的符号相同的,所以会出现你所说的情况.
重点在于这句话的表意“不超过除数的正整数”.这里说了是正整数,但是实际情况是,计算机中对负数的取余操作和书面的数学定义是不一样的.所以在科学计算的时候需要注意加以区分.详细的原因解释请见参考资料.
再问: 答非所问
再答: 其实说白了就是计算机考虑到实现的问题,最终导致了计算机得出的结果负数的余数会仍然是负数。 如果你看了参考资料的话,你就会发现在最底端有这样的解释: 计算机的取余实现方式其实就是做除法和减法,比如求—919被100整除的余数,那么计算机的实现是-919-100*(-919/100)=-919-100*(-9)=-19(这里-919/100在计算时是做整型处理,因此是会有舍去小数,得数是-9)。 但是依照数学定义的话,严格的算法应该是-919-100*[-919/100]=-919-100*[-9.19]==-919-100*(-10)=81(这里[]表示取最大下界,即[x]就是小于x的最大整数,所以这里[-919/100]=-10)。 可以看出,计算机实现中把数学定义中的取余直接使用整除做了计算,因此产生了差异。