Fang-und compute-überlauf bei der Multiplikation von zwei großen Ganzzahlen

Ich bin auf der Suche nach einem effizienten (wahlweise standard, elegant und einfach zu implementieren) Lösung zu vermehren, relativ große zahlen und speichert das Ergebnis in einer oder mehreren Ganzzahlen :

Lassen Sie sagen, ich habe zwei 64-bit-Ganzzahlen deklariert wie diese :

uint64_t a = xxx, b = yyy; 

Wenn ich a * b, wie kann ich erkennen, ob die Messergebnisse in einem überlauf-und in diesem Fall speichern Sie die tragen irgendwo?

Bitte beachten Sie, dass möchte ich nicht verwenden, keine große Nummer Bibliothek da habe ich die Beschränkungen auf die Art und Weise, die Speichere ich die zahlen.

  • Streng von der C standard-text, der vorzeichenlose integer-Multiplikation kann nicht überlaufen, aber es kann umschlagen. Das Verhalten von signed integer overflow nicht definiert ist. Es gibt Antworten auf diese Frage, die strikt davon ausgehen, dass die Operanden sind vorzeichenlose, und kann nicht als solche verwendet werden, die für Ganzzahlen mit Vorzeichen.
InformationsquelleAutor Ben | 2009-11-29
Schreibe einen Kommentar