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?