Forum: Mikrocontroller und Digitale Elektronik 32bit x 32bit Multiplikation in C


von nuess (Gast)


Lesenswert?

Hallo leute!

ich habe das problem, dass ich eine 32 bit zahl mit einer anderen 32 bit 
zahl multiplizieren und anschliessend dividieren muss. Ich arbeite auf 
einem NEC V850 controller mit einem GHS-Compiler in C.
Ich kann keine float zahlen benutzen!

Hat jemand eine idee oder sogar schon ne lösung wie ich sowas 
realisieren kann?

Gruß nuess

von Johnny (Gast)


Lesenswert?

Soweit ich sehe hat der NEC V850 eine 32-Bit CPU.
Dann könntest Du also einfach z.B. "long int" oder "unsigned long int" 
Tatentypen verwenden und die Aufgabe dem Compiler überlassen.

von Franceso (Gast)


Lesenswert?

hätte sogar eine lib dazu, für fixed point berechnungen.
Habe gerade nachgeschaut, der compiler scheint long long zu kennen,
probier es mal aus.

int32 muldiv(int32 value, int32 mul, int32 div) {
  long long tmp;
  tmp=value; tmp*=mul; tmp/=div; return (int32) tmp;
}

Sollte es nicht funktionieren, d.h. der Compiler unterstützt nur +-, 
gibt
es auch, dann mach high word und low word separat, und mach dann eine
Zusammenführung der Ergebnisse.

von Franceso (Gast)


Lesenswert?

Wenn du zwei 32bit Zahlen multiplizierst, dann kommt ein 64bit Ergebnis 
raus.
long int ist meistens nur 32bit, long long ist 64, aber es ist nicht 
gesagt,
daß der Compiler das auch unterstützt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.