本文主要介绍了C语言中的四种舍入方法和负模问题,包括算法的分析和改进,这是很多编程竞赛中常用的算法。有需要的朋友可以参考一下。
目录
零舍入、负无限舍入、正无限舍入和舍入舍入舍入舍入舍入的汇总
零向取整、负无穷向取整、正无穷向取整、四舍五入取整
如果将浮点数赋给整数,则只保存整数位:
这种舍入方式是零方向舍入,在C语言中默认采用。
C语言中也有对应的零向取整函数:
类似地,还有另一个函数是负无穷大舍入:
它的取整方案是向负无穷大取整:
有地板取整,当然也有正无穷大取整的函数:
它的取整方式是向正无穷大取整:
最后,还有一个舍入函数:
模块/余数
模概念:若A和D是两个自然数,D不为零,则可以证明有两个唯一的整数Q和R,满足a=q*d r且0 R D .其中Q称为商,R称为余数。所以q=a/d,r=a% d。
但是模负数呢?
在C语言中:
在Python中:
可以看出,两个模型的结果是不同的。
a=-10,d=3;
-10=(-3)*3 (-1) q=-3,r=-1;c编程语言
-10=(-4)*3 2 q=-4,r=2;计算机编程语言
从上面的例子可以看出,特定余数R的大小基本上是由商q决定的。商取决于除法计算中的舍入规则。
比如上面的-10/3=-3.3333,如果商四舍五入为零,结果为-3,余数为-1,而如果商四舍五入为负无穷大,结果为-4,余数为2。
两种舍入方法是模和余数的区别:
如果取余数或模数,要先计算商,才能得到余数。
余数:尽可能让商,四舍五入为零。
模数:尽可能让商,四舍五入到负无穷大。
对于商为正的情况,这两种方法没有区别,因为零方向舍入和负无限方向舍入的结果是相同的。但是,如果商的结果是负的,余数和模数的结果是不同的。
因此,如果参与取余数的两个数据具有相同的符号,则取模相当于取余数,因为商是正的。如果符号不一样,取模和取余数就不一样。
综上所述,C语言中%的本质其实是取余数,Python中%的本质是取模。
并且通过上面的分析,我们可以得出结论:
特定余数r的大小主要取决于商Q.当用除法计算时,商又取决于舍入规则。
取余数和取模:尽可能取余数做商,四舍五入为零。取尽可能远的模数以产生商,并舍入到负无穷大。
如果参与余数的两个数据符号相同,则取模等价于余数。
如果余数中涉及的两个数据符号不同,在C语言(或者其他使用舍入到0的语言如C、Java)中,余数符号与被除数相同。(由于四舍五入为0)
总结
本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。