diff --git a/rtl/objpas/math.pp b/rtl/objpas/math.pp index 68aec9dbf8..1f85f6fdc4 100644 --- a/rtl/objpas/math.pp +++ b/rtl/objpas/math.pp @@ -1263,12 +1263,19 @@ function arctan2(y,x : float) : float; end; {$endif FPC_MATH_HAS_ARCTAN2} +const + huge: double = 1e300; {$ifdef FPC_HAS_TYPE_SINGLE} function cosh(x : Single) : Single; var temp : ValReal; begin + if x>8.94159862326326216608E+0001 then + begin + cosh:=huge+huge; + exit; + end; temp:=exp(x); {$push} {$safefpuexceptions on} @@ -1283,6 +1290,11 @@ function cosh(x : Double) : Double; var temp : ValReal; begin + if x>7.10475860073943942030E+0002 then + begin + cosh:=huge+huge; + exit; + end; temp:=exp(x); {$push} {$safefpuexceptions on} @@ -1307,6 +1319,11 @@ function sinh(x : Single) : Single; var temp : ValReal; begin + if x>8.94159862326326216608E+0001 then + begin + sinh:=huge+huge; + exit; + end; temp:=exp(x); { gives better behavior around zero, and in particular ensures that sinh(-0.0)=-0.0 } if temp=1 then @@ -1324,6 +1341,11 @@ function sinh(x : Double) : Double; var temp : ValReal; begin + if x>7.10475860073943942030E+0002 then + begin + sinh:=huge+huge; + exit; + end; temp:=exp(x); if temp=1 then exit(x);