Maison >développement back-end >C++ >Pourquoi mon addition C Large Precision ne propage-t-elle pas correctement les bits de transport ?
Votre objectif est d'implémenter une grande classe de précision en C et vous avez rencontré un problème lors de l'addition de nombres. Lorsque vous ajoutez 0xffffffff et 0x04, vous obtenez 0xffff0003 au lieu du 0x0100000003 attendu.
La section en surbrillance de votre code est :
if (i < lhs.nbytes) { if (ret.data[i].data == 255 && ret.data[i + 1].carry == 1) increment(&trhs, i + 1); ret.data[i].data += ret.data[i + 1].carry; }
Voici pourquoi cela provoque le mauvais résultat :
Carry Propagation : À chaque itération de la boucle, le report de l'ajout précédent doit être ajouté au résultat actuel. Cependant, ce code n'applique le report que si ret.data[i].data vaut 255 et ret.data[i 1].carry vaut 1. Cela signifie que les reportages ne sont pas toujours propagés, ce qui entraîne une réponse incorrecte.
Ordre de stockage incorrect : La classe mpfl semble stocker les nombres au format petit-boutiste, où l'octet le moins significatif est stocké dans l'index le plus élevé. Ce n'est pas la méthode privilégiée pour stocker des nombres à ajouter, car elle rend plus difficile le traitement des transferts à partir d'octets d'ordre supérieur.
Pour résoudre ces problèmes, tenez compte des recommandations suivantes :
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!