From b9221a07a3df989716521af53dfe700476a159d0 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Sat, 11 Apr 2026 14:12:52 +0200 Subject: [PATCH] Fix a bug when evaluating -0.5^3. Use code which has been up to now only applied with LT compatibility. --- src/spicelib/parser/ptfuncs.c | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/spicelib/parser/ptfuncs.c b/src/spicelib/parser/ptfuncs.c index 92793f285..863a7921b 100644 --- a/src/spicelib/parser/ptfuncs.c +++ b/src/spicelib/parser/ptfuncs.c @@ -69,24 +69,21 @@ double PTpower(double arg1, double arg2) { double res; - if (newcompat.lt) { - if (arg1 == 0) + + if (arg1 == 0) + res = 0; + else if(arg1 > 0) + res = pow(arg1, arg2); + else { + /* If arg2 is quasi an integer, round it to have pow not fail + when arg1 is negative. Takes into account the double + representation which sometimes differs in the last digit(s). */ + if (AlmostEqualUlps(nearbyint(arg2), arg2, 10)) + res = pow(arg1, round(arg2)); + else + /* As per LTSPICE specification for ** */ res = 0; - else if(arg1 > 0) - res = pow(arg1, arg2); - else { - /* If arg2 is quasi an integer, round it to have pow not fail - when arg1 is negative. Takes into account the double - representation which sometimes differs in the last digit(s). */ - if (AlmostEqualUlps(nearbyint(arg2), arg2, 10)) - res = pow(arg1, round(arg2)); - else - /* As per LTSPICE specification for ** */ - res = 0; - } } - else - res = pow(fabs(arg1), arg2); return res; } @@ -106,7 +103,7 @@ PTpowerH(double arg1, double arg2) res = pow(arg1, arg2); } } - else if (newcompat.lt) { + else { if (arg1 >= 0) res = pow(arg1, arg2); else { @@ -120,8 +117,6 @@ PTpowerH(double arg1, double arg2) res = 0; } } - else - res = pow(fabs(arg1), arg2); return res; }