C++ 获取等于或大于原始值的整数x的最近倍数

C++ 获取等于或大于原始值的整数x的最近倍数,c++,C++,假设x=25,y=4。我想要最接近x的值,即a)y和b)的倍数等于或大于x,对于这些数字,它将是28。通常我会这样做: result = ceil((float)x / (float)y) * y 然而,这一次我处理的是uint64和相当大的数字,它们可能会被转换为双精度和双精度的过程所吞没,所以目前我正在做以下工作: if (x % y) result = (x / y + 1) * y else result = x 但我想知道是否有更好的方法,因为在处理文件时必须经常使用这种方法(我知

假设x=25,y=4。我想要最接近x的值,即a)y和b)的倍数等于或大于x,对于这些数字,它将是28。通常我会这样做:

result = ceil((float)x / (float)y) * y
然而,这一次我处理的是uint64和相当大的数字,它们可能会被转换为双精度和双精度的过程所吞没,所以目前我正在做以下工作:

if (x % y) result = (x / y + 1) * y
else result = x
但我想知道是否有更好的方法,因为在处理文件时必须经常使用这种方法(我知道这对我很有用)

我会这样做:

z = x%y;
result = x + (z? y-z: 0);
没有乘法或除法,也没有溢出的危险(如果正确的结果适合该类型)。

我会这样做:

z = x%y;
result = x + (z? y-z: 0);

没有乘法或除法,也没有溢出的危险(如果正确的结果适合该类型)。

第二段代码看起来很清楚,为什么需要更好的方法?如果是性能问题,你确定这是瓶颈吗?第二段代码看起来很清楚,为什么需要更好的方法?如果是性能问题,你确定这是瓶颈吗?你能解释一下为什么OP的情况下有溢出的危险,为什么你的代码中没有这样的危险吗?什么类型的溢出?@user3564091:假设x=93,y=11,类型能容纳的最大数字是100。正确答案是99,但是如果代码涉及到一个步骤,比如
x+y
,那么加法将超过类型的限制,结果将是一些奇怪的东西,比如4或-37,甚至是未定义的行为。OP的代码和我的代码都没有这样的危险。你能解释一下为什么OP的代码有溢出的危险,为什么你的代码没有这样的危险吗?什么类型的溢出?@user3564091:假设x=93,y=11,类型能容纳的最大数字是100。正确答案是99,但是如果代码涉及到一个步骤,比如
x+y
,那么加法将超过类型的限制,结果将是一些奇怪的东西,比如4或-37,甚至是未定义的行为。OP的密码和我的密码都没有这样的危险。