@@ -1405,24 +1405,32 @@ function tanh(x : Single) : Single;
var
tmp:ValReal;
begin
- if x < 0 then begin
- tmp:=exp(2*x);
- if tmp=1 then
- exit(x);
+ if abs(x)>10 then
+ begin
+ result:=sign(x);
+ exit;
+ end;
+
+ if x < 0 then
+ tmp:=exp(2*x);
+ if tmp=1 then
+ exit(x);
{$push}
{$safefpuexceptions on}
- result:=(tmp-1)/(1+tmp)
+ result:=(tmp-1)/(1+tmp)
{$pop}
- end
- else begin
- tmp:=exp(-2*x);
+ end
+ else
+ tmp:=exp(-2*x);
- result:=(1-tmp)/(1+tmp)
+ result:=(1-tmp)/(1+tmp)
- end;
end;
{$ENDIF}