【C++】正整数除法向上取整

如果要实现(a/b)向上取整的运算,通常可以使用ceil()函数,即如下代码:

但是,最近在做题过程中,碰到了一些极端数据,使用上面的方法会出错。例如:

a=1000000000000000000
b= 999999999999999999

正确答案为2,但程序输出为1。

原因如下:a/b的真实数值为1.000000000000000001,有19位有效数字,然而double的有效数位只有16位,因此a/b的结果在程序中被存储为1。测试程序如下:

所以,如果数据较大,就需要避开浮点数的除法运算。更加安全的方法如下:

Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments