首页 >后端开发 >C++ >如何在 C 中有效地舍入到最接近的倍数?

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

Linda Hamilton
Linda Hamilton原创
2024-11-29 10:45:11334浏览

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