Einzelnen Beitrag anzeigen

Kanikkl

Registriert seit: 11. Okt 2009
Ort: Soest
10 Beiträge
 
#1

die Division eines Taschenrechners

  Alt 11. Okt 2009, 13:19
Ich glaube mittlerweile ist bekannt dass ich an nem Taschenrechner arbeite der aufeinander Aufbaut xD Und jetzt wird mir langsam klar, dass die division doch kein all zu leichtes Stück ist.

Mein Code sieht so aus:

Delphi-Quellcode:
function krechnungen.addieren(x,y: extended): extended;
begin
  result:=x+y;
end;

function krechnungen.subtrahieren(x,y: extended): extended;
begin
  result:=x-y;
end;

function krechnungen.multiplizieren(x,y: extended): extended;
var
temp :extended;
i, durchlauf: integer;
begin
  temp:=x;
  durchlauf:=round(y);
  for i:=1 to durchlauf-1 do
  begin
    temp:=self.addieren(temp,x);
  end;
result:=temp;
end;

function krechnungen.dividieren(x,y: extended): extended;
var
temp,ergebnis :extended;
begin
  temp:=x;
  temp:=self.multiplizieren(temp,1000000);
  ergebnis:=0;
  repeat
    temp:=self.subtrahieren(temp,y);
    ergebnis:=ergebnis+0.000001;
  until (temp=0) or (temp<0) or (temp<y);
  result:=ergebnis;
end;
und bei einer simplen division wie 2/2 bekomme ich einen Wert wie 1.0000000001 heraus. Ich vermute es hängt mit der until schleife zusammen, die rechnet ja noch einen weiteren Schritt und wird erst nach der letzten(+1) schleife angehalten. Dass heißt ein Schritt ist unnötigt.

Wie bekomme ich es hin, dass die Methode diesen Schritt nicht ausführt? Ich bin mir nicht sicher, aber kann man da etwas mit einer While (temp>0) and (temp<y); schleife anfangen? Oder kann man den Mechanismus irgendwie simpler hinbekommen?
  Mit Zitat antworten Zitat