From 3dd94ba15c7c3752d904d77eaa0972ea39eb994b Mon Sep 17 00:00:00 2001 From: dwarning Date: Wed, 3 Oct 2018 20:45:29 +0200 Subject: [PATCH] differentiate tan and tanh in safe way without cos and cosh --- src/spicelib/parser/inpptree.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/spicelib/parser/inpptree.c b/src/spicelib/parser/inpptree.c index e773ecf31..92e1d8766 100644 --- a/src/spicelib/parser/inpptree.c +++ b/src/spicelib/parser/inpptree.c @@ -461,16 +461,16 @@ static INPparseNode *PTdifferentiate(INPparseNode * p, int varnum) p->left))); break; - case PTF_TAN: /* 1 / (cos(u) ^ 2) */ - arg1 = mkb(PT_DIVIDE, mkcon(1.0), mkb(PT_POWER, - mkf(PTF_COS, + case PTF_TAN: /* 1 + (tan(u) ^ 2) */ + arg1 = mkb(PT_PLUS, mkcon(1.0), mkb(PT_POWER, + mkf(PTF_TAN, p->left), mkcon(2.0))); break; - case PTF_TANH: /* 1 / (cosh(u) ^ 2) */ - arg1 = mkb(PT_DIVIDE, mkcon(1.0), mkb(PT_POWER, - mkf(PTF_COSH, + case PTF_TANH: /* 1 - (tanh(u) ^ 2) */ + arg1 = mkb(PT_MINUS, mkcon(1.0), mkb(PT_POWER, + mkf(PTF_TANH, p->left), mkcon(2.0))); break;