Maison > développement back-end > C++ > Comment puis-je arrondir efficacement au multiple le plus proche en C ?

Comment puis-je arrondir efficacement au multiple le plus proche en C ?

Linda Hamilton
Libérer: 2024-11-29 10:45:11
original
339 Les gens l'ont consulté

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

Arrondir au multiple le plus proche : une analyse complète en C

La tâche d'arrondir un nombre au multiple le plus proche d'un autre nombre est un problème courant en programmation. Dans cet article, nous explorerons la meilleure approche pour accomplir cette tâche en C.

Implémentation originale

Une méthode couramment utilisée est :

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);
}
Copier après la connexion

Bien que cette mise en œuvre puisse sembler simple, elle présente des limites :

  • Elle ne fonctionne que pour des raisons positives. nombres.
  • Cela nécessite des calculs complexes, introduisant potentiellement des erreurs d'arrondi.

Solution améliorée

Une meilleure approche consiste à utiliser les opérateur de module pour calculer le reste. Si le reste est différent de zéro, nous ajoutons la différence entre le reste et le multiple au nombre d'origine pour l'arrondir.

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

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

  return numToRound + multiple - remainder;
}
Copier après la connexion

Cas des nombres négatifs

Selon l'interprétation de "up" pour les nombres négatifs, une version négative de la fonction peut être nécessaire.

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;
  }
}
Copier après la connexion

Cette implémentation gère à la fois nombres positifs et négatifs correctement en considérant le signe de l'entrée. Il utilise également l'arithmétique entière, ce qui le rend efficace et précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal