Ich muss berechnen
%Vor%wo
%Vor%Ich muss dies in reinem C / C ++ ohne Bibliotheken auf einem Mikrocontroller tun. Der Compiler unterstützt die Typen int64_t und uint64_t; wahrscheinlich keine Hardware-Implementierung für Multiplikation oder Division. Zur Zeit habe ich einen Workaround für den uint32_t-Faktor, aber ich brauche eine Lösung für Faktor 2 ^ 32.
OP: "Momentan habe ich eine Umgehung für den uint32_t-Faktor"
Die factor == 2^32
ist ein Eckfall und es ist alles, was hier zu lösen ist, da die "Workaround" von OP die Faktoren [0 ... 2^32-1]
behandeln kann.
Wenn dividend
ohne Überlauf verdoppelt werden kann, verwenden Sie einfach factor == 2^31
mit einer doppelten dividend
.
Wenn die divisor
gerade ist, verwenden Sie factor == 2^31
mit einer halbierten divisor
. @Weather Vane
Sonst ist dividend
groß. Erinnern Sie sich daran, dass der Quotient in [-2^31 ... 2^31-1]
range liegt. Im Allgemeinen wird das Produkt der großen dividend
und factor == 2^32
Dividende durch die divisor
außerhalb des Bereichs int32_t
liegen, so dass diese Kombinationen außerhalb des Bereichs keine Rolle spielen, da "Ergebnis: passt garantiert in int32_t
".
Die akzeptablen Randbedingungen treten mit einem Endquotienten nahe der Kante des Bereichs int32_t
auf.
Nach dem Test ist dividend
und divisor
die einzige darstellbare Antwort in INT32_MIN
.
Beispielcode:
%Vor% Das ursprüngliche Problem besteht darin, diese Randbedingung zu erkennen und wie sie behandelt wird. Die workaround_for_the_uint32_t_factor()
wurde möglicherweise noch nicht codiert, daher wurde sie nicht gepostet.
Tags und Links algorithm biginteger c bignum division