Einzelnen Beitrag anzeigen

Tortus

Registriert seit: 15. Nov 2003
Ort: Gescher
47 Beiträge
 
Delphi 7 Enterprise
 
#1

Subtraktion mit DECMath bringt Probleme

  Alt 15. Mär 2006, 16:45
Hallo,
ich habe folgendes Problem:
Delphi-Quellcode:
t ist ungefähr 0.012
s ist genau 0.5

NSub(s,t);

s ist 5146823... irgendwas, zumindest nichts sinnvolles.
Kann mir einer schnell erklären, wie diese Zahl zustandekommt? Da sollte ja eigentlich irgendwas mit s = 0.48... rauskommen.

Würde mich über schnelle Antworten sehr sehr freuen, da ich das für eine Arbeit brauche, die ich zu Freitag abzuliefern habe, und das eigentlich heute fertigstellen möchte


/e:
Hab mich entschlossen, dass etwas mehr Kontext nicht Schaden kann:
Delphi-Quellcode:
var
  i: Integer;
  a,b,s,t,y,l: IRational;
begin
    Listbox1.Items.Add('---------Prolog---------');
  NSet(a, 1);
  NSet(l,NRat(1.411));
  NSqrt(l);
    Listbox1.Items.Add('l = '+NStr(l));
  NDiv(b, NRat(1), l);
  NSet(s, 0.5);
  NSet(t, 0);
    Listbox1.Items.Add('a = '+NStr(a));
    Listbox1.Items.Add('b = '+NStr(b));
    Listbox1.Items.Add('s = '+NStr(s));
    Listbox1.Items.Add('t = '+NStr(t));
    Listbox1.Items.Add('---------Iteration---------');
  for i:= 1 to 3 do
  begin
    NSet(y,a); // y = a
    Listbox1.Items.Add('y = '+NStr(y));

    NAdd(a, b); // a = a+b
    NDiv(a, 2); // a = a/2
    Listbox1.Items.Add('a = '+NStr(a));

    NMul(b,y); // b = b*y
    NSqrt(b); // b = sqrt(b)
    Listbox1.Items.Add('b = '+NStr(b));

    NSub(l,a,y); // l = a - y
    Listbox1.Items.Add('l = '+NStr(l));
    NPow(t, l, 2); // t = l^2
    Listbox1.Items.Add('t = '+NStr(t));
    NPow(l, NRat(2), i);
    Listbox1.Items.Add('l = '+NStr(l));
    NMul(t, l); // t = t*l
    Listbox1.Items.Add('t = '+NStr(t));

    NSub(s,t);
    Listbox1.Items.Add('s = '+NStr(s));
    Listbox1.Items.Add('--Fertig mit Schritt '+IntToStr(i));
  end;
    Listbox1.Items.Add('---------Epilog---------');
  NAdd(a, b);
    Listbox1.Items.Add('a = '+NStr(a));
  NPow(a, 2);
    Listbox1.Items.Add('a = '+NStr(a));
  NMul(s, 2);
    Listbox1.Items.Add('s = '+NStr(s));
  NDiv(a, s);
    Listbox1.Items.Add('a = '+NStr(a));
    Listbox1.Items.Add('Pi = '+NStr(a));
end;
Das Ganze soll der Berechnung von Pi dienen. Die Listbox ist, wie sich unschwer erkennen lässt, nur zur Überprüfung.
Thorsten Lanfer
  Mit Zitat antworten Zitat