目录
一:取整方式
1:向0取整 --- trunc取整函数
2.向-∞取整 --- floor(地板)函数
3.向+∞取整 --- ceil函数
4.四舍五入取整 --- round 函数
5.四种取整方式的对比
二:取模
1.引入
2.取模与取余等价?
一:取整方式
C语言中默认向0取整
1:向0取整 --- trunc取整函数
画图分析:
示例:
2.向-∞取整 --- floor(地板)函数
画图分析:
示例:
3.向+∞取整 --- ceil函数
画图分析:
示例:
4.四舍五入取整 --- round 函数
画图分析:
示例:
5.四种取整方式的对比
代码为:
#include <stdio.h> /* printf */
#include <math.h> /* round, floor, ceil, trunc */
int main()
{
const char* format = "%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n";
printf("value\tround\tfloor\tceil\ttrunc\n");
printf("-----\t-----\t-----\t----\t-----\n");
printf(format, 2.3, round(2.3), floor(2.3), ceil(2.3), trunc(2.3));
printf(format, 3.8, round(3.8), floor(3.8), ceil(3.8), trunc(3.8));
printf(format, 5.5, round(5.5), floor(5.5), ceil(5.5), trunc(5.5));
printf(format, -2.3, round(-2.3), floor(-2.3), ceil(-2.3), trunc(-2.3));
printf(format, -3.8, round(-3.8), floor(-3.8), ceil(-3.8), trunc(-3.8));
printf(format, -5.5, round(-5.5), floor(-5.5), ceil(-5.5), trunc(-5.5));
return 0;
}
结果为:
二:取模
取模的定义:
如果a和b是两个自然数,d非0,可以证明存在两个唯一的整数q和r,满足 a = q * d + r , q为整数,且 0 <= |r| <= |d| 。其中 q为商,r为余数。
1.引入
我们直到 10 / 3 = 3 ,10 % 3 = 1 ,那么如果是 -10 / 3 ,-10 % 3 又该等于多少呢,在VS中进行测试得到下述结果:
那么是否其他语言也是这个结果呢?
在python环境中测试:
从中,我们可以得到:在不同语言中,同一计算表达式,负数“取模”结果是不同的,我们可以称之为分别叫做正余数和负余数。
那么是什么决定了上述现象???
其实,余数取决于商,而商取决于取整规则。
在C语言中:-10/3 (-3)---> 向0取整
python中: -10/3 (-4)---> 向-∞取整
2.取模与取余等价?
由上述可知,余数取决于商 --- 那么取模是否等价于取余呢???
其实两者并不完全等价
本质1:
取余:尽可能让商,进行向0取整
取模:尽可能让商,向-∞方向取整
即,C语言中的%,本质上是取余;python中的%,本质上式取模。
上述情况说的是负数/ 或者% 一个正数,那么如果是一个正数 / 或者 % 一个负数呢?
在VS中:
在python中:
通过上述代码测试,我们可以看出 10 / -3 = -3.333... 对其进行向0取整,结果为 -3
余数为 1 ,对其进行 -∞ 取整,得到的结果为 -3.333,(-4) ,余数为 2。
总结:
对任何一个大于0的数,对其进行0向取整和 -∞ 取整,取整方向是一致的,即取模等价于取余
对任何一个小于0的数,对其进行0向取整和 -∞ 取整,取整方向是相反的的,即取模不等价于取余
图像对比为:
本质2:
参与取余的两个数据,如果同符号,取模等价于取余。
在VS中(C语言中)
在python中