C语言里“⼀”在表示两个数相除时 “向下取整”缺陷解决方案

2025-02-26 19:06:50
推荐回答(2个)
回答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的缺陷。否则,反过来,难道默认向上取整就不是缺陷?

回答2:

165*2=330<331..所以165并不是向上取整,而也是向下取整