すべてがポジティブであることが保証されている場合は、一定の時間でそれをしない
multiple = baseNumber + number - 1;
multiple -= (multiple % number);
を試してみてください。
最初に、number - 1
を追加して、少なくとも次の倍数と同じ大きさで、それよりも小さい数値を確保します。次に、除算の残りをnumber
で減算して、希望の倍数を確保します。 (まだしかしnumber
正)
baseNumber
を否定することができた場合は、我々は、上記のnumber
の複数をスキップすることができmultiple % number
ように、multiple < 0
場合は負でもよいという問題に直面しています。それを避けるために、たとえば分岐があまりにも高価である場合は、我々は1つではなく、2つの区分のコストでif
を避けることができ
remainder = multiple % number;
if (remainder < 0) remainder += number;
multiple -= remainder;
、
multiple -= (number + (multiple % number)) % number;
は一般的に、
if
は、しかし、望ましいと思われます。
number
の値が負の値になる場合は、最初にその絶対値に置き換えてください。
注:上記は、元のコードのように、baseNumber
が既にnumber
の倍数である場合は返します。それが望ましくない場合は、最初の行にある- 1
を削除してください。
あなたは数学スタック所でこれを求めたほうが良いかもしれません。数字の倍数で何を意味するのかを、より明確またはより厳密に定義したい場合もあります。 – Jim