Dies ist (AFAIK) eine spezifische Frage innerhalb dieses allgemeine Thema .
Die Situation ist wie folgt:
Ich habe ein eingebettetes System (eine Videospielkonsole), das auf einem 32-Bit-RISC-Mikrocontroller (einer Variante des V810 von NEC) basiert. Ich möchte eine Bibliothek für Festkomma-Mathematik schreiben. Ich lese dieser Artikel , aber der zugehörige Quellcode ist in 386-Assembler geschrieben, so dass er weder direkt verwendbar noch leicht veränderbar ist.
Der V810 hat eine eingebaute Integer-Multiplikations-/Divisionsfunktion, aber ich möchte das im obigen Artikel erwähnte 18.14-Format verwenden. Dazu muss ein 64-Bit-Int durch einen 32-Bit-Int geteilt werden, und der V810 kann nur (vorzeichenbehaftete oder vorzeichenlose) 32-Bit/32-Bit-Divisionen durchführen (was einen 32-Bit-Quotienten und einen 32-Bit-Rest ergibt).
Meine Frage ist also: Wie simuliere ich eine 64-Bit/32-Bit-Division mit einer 32-Bit/32-Bit-Division (um die Vorverschiebung des Dividenden zu ermöglichen)? Oder, um das Problem aus einem anderen Blickwinkel zu betrachten: Wie kann ich eine Festkommazahl von 18,14 am besten durch eine andere dividieren, indem ich standardmäßige 32-Bit-Arithmetik/Logikoperationen verwende? ("am besten" bedeutet am schnellsten, am kleinsten oder beides).
Algebra, (V810) Assembler und Pseudocode sind alle in Ordnung. Ich werde den Code von C aus aufrufen.
Vielen Dank im Voraus!
EDIT: Irgendwie habe ich etwas übersehen diese Frage ... Allerdings wird es noch einige Modifikationen benötigen, um super-effizient zu sein (es muss schneller sein als die Gleitkomma-Div des v810, obwohl es das vielleicht schon ist...), also zögern Sie nicht, meine Arbeit für mich im Austausch für Reputationspunkte zu tun ;) (und natürlich die Erwähnung in meiner Bibliotheksdokumentation).
0 Stimmen
64/32-Bit-Division auf einem Prozessor mit 32/16-Bit-Division