Problem bei der Übertragsweitergabe in der mpfl-Addition
Ihre mpfl-Additionsfunktion hat ein Problem mit der korrekten Weitergabe des Übertragswerts, was zu einer falschen Summe führt. Insbesondere wenn nach der Addition zweier 32-Bit-Werte das Ergebnis den Bereich eines einzelnen 32-Bit-Werts überschreitet, wird das Übertragsbit nicht ordnungsgemäß weitergegeben, was zu einer falschen Summe führt.
Architektonischer Ansatz
Um dieses Problem zu lösen, ist es von Vorteil, eine ALU-Architektur (Arithmetic Logic Unit) in Betracht zu ziehen, die denen ähnelt, die in Hardware-Implementierungen verwendet werden. Indem Sie Ihren Code nach dem Betrieb einer ALU modellieren, können Sie die Genauigkeit Ihrer Berechnungen vereinfachen und verbessern.
Korrektur des Codes
Der folgende Code stellt eine überarbeitete Version bereit Ihrer Additionsfunktion, die das Problem der Übertragsausbreitung angeht:
mpfl operator+(const mpfl &lhs, const mpfl &rhs) { unsigned long i; mpfl ret(0); mpfl trhs(rhs); ALU32 alu; for (i = lhs.nbytes; i >= 0; i--) { alu.adc(ret.data[i].data, lhs.data[i].data, trhs.data[i].data); if (i < lhs.nbytes) { if (ret.data[i].data == 255 && ret.data[i + 1].carry == 1) increment(&trhs, i + 1); } } return ret; }
Schlüssel Änderungen
Das obige ist der detaillierte Inhalt vonWarum kann meine Multi-Precision-Floating-Point-Addition (MPFL) Übertragsbits nicht korrekt weitergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!