Fukcja EXP zwraca błędne wyniki

0

Witam,

mam oto taki problem, napisałem taką funkcję:

A:=(EXP(n*ln(1+i)))-1

Problem w tym, że dla wartości n=300 oraz i=0,0058 zwraca mi wynik 4,72541820930 a tymczasem obliczenia na kalkulatorze dają 4,668777164. Dzieje się tak dla dużych wartości "n" oraz małych "i" (tak jak w podanym przykładzie). Co może być nie tak? Czy trzeba gdzieś wstawić jakieś dyrektywy czy jak? Szukałem na forum, ale nigdzie nie znalazłem takiego przypadku, w pomocy Delphi też niczego się nie doszukałem.

Z góry dzięki.

0

Jakiego typu zmienne zadeklarowałeś?

0

Dałem real dla wszystkich, a wyniki wyrzucam za pomocą FormatFloat.

0

Jeśli piszesz w Delphi/FPC, to real == single (4 bajty)
inny typ, to double (8 bajtów) i najdokładniejszy ze zmiennoprzecinkowych: extended (10 bajtów).
Zmiana typów z Real na Extended, powinna poprawić wyniki w znaczący sposób.

0

Próbowałem w Delphi6 i TurboDelphi
Niezależnie od typu Single, Real, Extended otrzymuję zawsze prawidłowy wynik.

0

Wszystkie zmienne są typu real. Dałem teraz extended i nic. Dalej to samo. Mam Delphi 7. Walczę dalej.

0

Może źle piszesz kod...

0

Delphi7 - Pusta aplikacja, jeden przycisk z akcją:

Caption:=FloatToStr((EXP(300*ln(1+0.0058)))-1);

Otrzymany wynik: 4,66877716379045

Oczywiście poniższy kod, tak jak tego można się spodziewać, też daje ten wynik:

var n,i:extended;
begin
n:=300;
i:=0.0058;
Edit1.Text:=FloatToStr((EXP(n*ln(1+i)))-1);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1