diff --git a/src/spicelib/parser/ptfuncs.c b/src/spicelib/parser/ptfuncs.c index 9410a81fd..6abfff6d2 100644 --- a/src/spicelib/parser/ptfuncs.c +++ b/src/spicelib/parser/ptfuncs.c @@ -70,7 +70,24 @@ PTdivide(double arg1, double arg2) double PTpower(double arg1, double arg2) { - return pow(fabs(arg1), arg2); + double res; + if (newcompat.lt) { + 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. */ + if (AlmostEqualUlps(trunc(arg2), arg2, 3)) + res = pow(arg1, round(arg2)); + else + /* As per LTSPICE specification for ** */ + res = 0; + } + } + else + res = pow(fabs(arg1), arg2); + return res; } double