From c3bd722120585c59c47dff6a98948cd89cc8b28e Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 20 Nov 2022 21:33:40 -0800 Subject: expt: zero exponent yields 1.0. * arith.c (expt): NUM-FLNUM, FLNUM-NUM and FLNUM-FLNUM cases ensure that if the expontent is zero, the return value is 1.0. Implementations of pow do this, but ISO C doesn't require it. * txr.1: Now documented. --- arith.c | 6 ++++++ txr.1 | 3 +++ 2 files changed, 9 insertions(+) diff --git a/arith.c b/arith.c index fad3e15b..32f3da44 100644 --- a/arith.c +++ b/arith.c @@ -2468,6 +2468,8 @@ tail: cnum a = c_n(anum); double b = c_flo(bnum, self); + if (b == 0.0) + return flo(1.0); if (a == 0 && b < 0) goto divzero; return flo(pow(a, b)); @@ -2477,6 +2479,8 @@ tail: double a = c_flo(anum, self); cnum b = c_n(bnum); + if (b == 0) + return flo(1.0); if (a == 0 && b < 0) goto divzero; return flo(pow(a, b)); @@ -2486,6 +2490,8 @@ tail: { double a = c_flo(anum, self); double b = c_flo(bnum, self); + if (b == 0.0) + return flo(1.0); if (a == 0 && b < 0) goto divzero; return flo(pow(a, b)); diff --git a/txr.1 b/txr.1 index cf6289d3..4e97200a 100644 --- a/txr.1 +++ b/txr.1 @@ -48549,6 +48549,9 @@ operand is converted to a float, and a floating point exponentiation is performed. Exponentiation that would produce a complex number is not supported. +If the exponent is zero, then the return value is 1.0 if at least one operand +is floating-point, otherwise 1. + The .code sqrt function produces a floating-point square root of -- cgit v1.2.3