ホームページ > バックエンド開発 > C++ > C で最も近い倍数に効率的に切り上げるにはどうすればよいですか?

C で最も近い倍数に効率的に切り上げるにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-29 10:45:11
オリジナル
401 人が閲覧しました

How Can I Efficiently Round Up to the Nearest Multiple in C  ?

最も近い倍数への切り上げ: C での包括的な分析

数値を別の数値の最も近い倍数に切り上げるタスクプログラミングではよくあることです。この記事では、C でこのタスクを達成するための最適なアプローチを検討します。

オリジナルの実装

一般的に使用されるメソッドの 1 つは次のとおりです。

int roundUp(int numToRound, int multiple) {
  if (multiple == 0) {
    return numToRound;
  }

  int roundDown = ((int)(numToRound) / multiple) * multiple;
  int roundUp = roundDown + multiple;
  int roundCalc = roundUp;
  return (roundCalc);
}
ログイン後にコピー

この実装は簡単そうに見えますが、次のような制限があります。

  • 次の場合にのみ機能します。正の数。
  • 複雑な計算が必要であり、丸め誤差が生じる可能性があります。

改善された解決策

より良いアプローチは、次のとおりです。剰余を計算するための剰余演算子。剰余がゼロ以外の場合、剰余と倍数の差を元の数値に加算して切り上げます。

int roundUp(int numToRound, int multiple) {
  if (multiple == 0) {
    return numToRound;
  }

  int remainder = numToRound % multiple;
  if (remainder == 0) {
    return numToRound;
  }

  return numToRound + multiple - remainder;
}
ログイン後にコピー

負の数値の場合

負の数の「up」の解釈によっては、関数の負のバージョンは次のようになります。

int roundUp(int numToRound, int multiple) {
  if (multiple == 0) {
    return numToRound;
  }

  int remainder = abs(numToRound) % multiple;
  if (remainder == 0) {
    return numToRound;
  }

  if (numToRound < 0) {
    return -(abs(numToRound) - remainder);
  } else {
    return numToRound + multiple - remainder;
  }
}
ログイン後にコピー

この実装は、入力の符号を考慮することにより、正の数と負の数の両方を正しく処理します。また、整数演算も使用するため、効率的かつ正確になります。

以上がC で最も近い倍数に効率的に切り上げるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート