* lnxp1 function fixed to be accurate near zero argument values, using code from AMath library by Wolfgang Ehrhardt.

git-svn-id: trunk@26084 -
This commit is contained in:
sergei 2013-11-14 07:03:11 +00:00
parent 9b1a36fcdb
commit 5206584805

View File

@ -309,7 +309,7 @@ function log10(x : float) : float;
function log2(x : float) : float;
function logn(n,x : float) : float;
{ returns natural logarithm of x+1 }
{ returns natural logarithm of x+1, accurate for x values near zero }
function lnxp1(x : float) : float;
{ exponential functions }
@ -871,10 +871,19 @@ function logn(n,x : float) : float;
end;
function lnxp1(x : float) : float;
var
y: float;
begin
if x<-1 then
InvalidArgument;
lnxp1:=ln(1+x);
if (x>=4.0) then
lnxp1:=ln(1.0+x)
else
begin
y:=1.0+x;
if (y=1.0) then
lnxp1:=x
else
lnxp1:=ln(y)+(x-(y-1.0))/y;
end;
end;
function power(base,exponent : float) : float;