Divisions-Algorithmus (mit Rest)

Hallo,
wie würde der Algorithmus aussehen, der die Ganzzahldivision und den Rest nur mithilfe von +, - und * berechnet?
(In Pseudo-Code)

Ich sitze nun schon recht lange über der Frage und bisher ist mir noch kein wirklich effizientes Verfahren eingefallen.

Danke schon mal an euch!
Daria

Hallo Daria!

Meine Überlegung: Man subrahiert vom Dividenten solange den Divisor, bis das Ergebnis kleiner als der Divisor ist. Die Anzahl der Schleifendurchgänge ist dann Divident div Divisor und der Zahlenwert ist der Rest.

Procedure Ganzahldivision (Divident, Divisor);
Begin
Quotient:=0;
While Divident-Divisor>Divisor Do
Begin
Divident:=Divident-Divisor;
Quotient:=Quotient+1;
End;
Rest:=Divident;

End;

MfG,

Falk

Moien

wie würde der Algorithmus aussehen, der die Ganzzahldivision
und den Rest nur mithilfe von +, - und * berechnet?

Naja, der perfekte Code wird der sein den normale CPUs auch benutzen: Newton-Raphson Division.

Ich sitze nun schon recht lange über der Frage und bisher ist
mir noch kein wirklich effizientes Verfahren eingefallen.

Die Theorie findet sich hier: http://de.wikipedia.org/wiki/Newton-Raphson-Verfahren

Den Code für Integer musst du dir selbst aus google fischen.

cu

Danke! Ich bin partout nicht auf diese Bedingung gekommen:

While Divident-Divisor>Divisor Do

Aber diese Prozedur funktioniert doch nur mit positiven zahlen oder sehe ich das falsch?

Welche Bedingung kann man ganz zu Beginn setzen, damit auch die Division mit negativen Zahlen abgedeckt ist?

Danke! Ich bin partout nicht auf diese Bedingung gekommen:

While Divident-Divisor>Divisor Do

Aber diese Prozedur funktioniert doch nur mit positiven zahlen
oder sehe ich das falsch?

Die Prozedur funktioniert nur dann, wenn Divident und Divisor das gleiche Vorzeichen haben.
Um sowohl negative, als auch positive Zahlen zu berücksichtigen muss man betrachten, ob Divident und Divisor das Gleiche Vorzeichen haben: If Divident*Divisor Else

MfG Falk

Hallo,

da auch Multiplikation erlaubt ist kann man in einer Schleife auch solange mit ganzen Zahlen multiplizieren bis das Ergebnis groesser als der Divident ist. Das Ergebnis ist dann die Zahl 1 kleiner der Schleifendurchgaenge:

while i\*Divisor 

Fuer negative Zahlen muss man den Code anpassen und vorab eine Entscheidung treffen.

Ciao! Bjoern