Ich habe eine Struktur darstellt, eine nicht-negative rationale Zahl p/q:Multipliziert ganze Zahl durch rationale ohne Zwischenüberlauf
struct rational {
uint64_t p;
uint64_t q; // invariant: always > 0
};
Ich mag würde mein rational durch eine uint64 n
und bekommen eine ganze Zahl Ergebnis abgerundet multiplizieren. Das heißt, würde ich berechnen mag:
uint64_t m = (n * r.p)/r.q;
während Zwischenüberlauf zu vermeiden in n * r.p
. (Natürlich kann das Endergebnis überlaufen, was akzeptabel ist.)
Wie kann ich das tun? Gibt es einen Weg, dies ohne eine hohe Multiplikation zu tun?
(ich boost :: sah rational, aber es scheint nicht, diese Funktion zur Verfügung zu stellen.)
wäre es mit 'uint64_t m nicht funktioniert = (n/r.q) * r.p'? – dangom
Berechnen Sie die rationale Zahl 'n/r.q', und reduzieren Sie sie auf ihre niedrigste Form, dann multiplizieren Sie diese mit' r.p'. – Barmar
@DanielG, Barmar: Keine von diesen hilft, wenn "p == n" und "p