C语言里“/”在表示两个数相除时 “向下取整”缺陷解决方案
1个回答
展开全部
1.
向上取整问题:如果整除
X/M=N,则
X=N*M
+
d,其中余数
d
的范围是
[0,M-1]考虑数字
Y
=
X+(M-1)
=
(N*M+d)
+
(M-1)
=
(N+1)*M
+
(d-1),很容易发现,当
d>1
时,整除
Y/M=N+1,就是说在
X+(M-1)
实现了向上取整;当d=0时,整除Y/M=N,结果是准确的值。2.
数据类型转换问题:数字后面添加
.f 表示这是一个浮点数,浮点数的运算符
/ 是普通的除法,不是整除,得到的结果仍然是浮点数,转换成整数的时候直接把小数点后面的舍去了,不能实现向上取整。3.
向下取整不能说是C的缺陷。否则,反过来,难道默认向上取整就不是缺陷?
向上取整问题:如果整除
X/M=N,则
X=N*M
+
d,其中余数
d
的范围是
[0,M-1]考虑数字
Y
=
X+(M-1)
=
(N*M+d)
+
(M-1)
=
(N+1)*M
+
(d-1),很容易发现,当
d>1
时,整除
Y/M=N+1,就是说在
X+(M-1)
实现了向上取整;当d=0时,整除Y/M=N,结果是准确的值。2.
数据类型转换问题:数字后面添加
.f 表示这是一个浮点数,浮点数的运算符
/ 是普通的除法,不是整除,得到的结果仍然是浮点数,转换成整数的时候直接把小数点后面的舍去了,不能实现向上取整。3.
向下取整不能说是C的缺陷。否则,反过来,难道默认向上取整就不是缺陷?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询