首頁 >後端開發 >C++ >如何在 C 中有效地舍入到最接近的倍數?

如何在 C 中有效地舍入到最接近的倍數?

Linda Hamilton
Linda Hamilton原創
2024-11-29 10:45:11335瀏覽

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

捨入到最接近的倍數:C 語言的綜合分析

將一個數字捨入到另一個數字最接近的倍數的任務是程式設計中常見的一種。在本文中,我們將探索在 C 中完成此任務的最佳方法。

原始實作

常用的一種方法是:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn