summaryrefslogtreecommitdiff
path: root/cad/gnucap/patches/patch-ab
blob: 849fea647ec54d364f6d02a9414ae0aba8e77cff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$NetBSD: patch-ab,v 1.1 2003/04/21 03:06:30 dmcmahill Exp $

--- src/bm_tanh.cc.orig	Wed Nov  6 02:47:52 2002
+++ src/bm_tanh.cc
@@ -65,13 +65,23 @@ void EVAL_BM_TANH::print(OMSTREAM& where
   print_base(where);
 }
 /*--------------------------------------------------------------------------*/
+const double LOGBIGBIG = log(BIGBIG);
 void EVAL_BM_TANH::tr_eval(ELEMENT* d)const
 {
   double x = ioffset(d->_y0.x);
   double aa = x * _gain/_limit;
-  double cosine = cosh(aa);
-  double f1 = _gain / (cosine*cosine);
-  double f0 = _limit * tanh(aa);
+  double f1, f0;
+  {if (aa > LOGBIGBIG) {
+    f1 = 0;
+    f0 = _limit;
+  }else if (aa < -LOGBIGBIG) {
+    f1 = 0;
+    f0 = -_limit;
+  }else{
+    double cosine = cosh(aa);
+    f1 = _gain / (cosine*cosine);
+    f0 = _limit * tanh(aa);
+  }}
   d->_y0 = FPOLY1(x, f0, f1);
   tr_final_adjust(&(d->_y0), d->f_is_value());
 }