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());
}
|