summaryrefslogtreecommitdiff
path: root/cad/gnucap/patches/patch-ab
diff options
context:
space:
mode:
Diffstat (limited to 'cad/gnucap/patches/patch-ab')
-rw-r--r--cad/gnucap/patches/patch-ab31
1 files changed, 31 insertions, 0 deletions
diff --git a/cad/gnucap/patches/patch-ab b/cad/gnucap/patches/patch-ab
new file mode 100644
index 00000000000..849fea647ec
--- /dev/null
+++ b/cad/gnucap/patches/patch-ab
@@ -0,0 +1,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());
+ }