From 776035ee9eed5bbaae6c36f41dbb3a29e80b27e7 Mon Sep 17 00:00:00 2001 From: Petro Karashchenko Date: Sun, 29 Sep 2024 23:12:33 +0200 Subject: [PATCH] nuttx/libm: fix powl wrong if first parameter is negative Signed-off-by: Petro Karashchenko --- libs/libm/libm/lib_powl.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/libm/libm/lib_powl.c b/libs/libm/libm/lib_powl.c index f3b97e4fddc..a71de03d02e 100644 --- a/libs/libm/libm/lib_powl.c +++ b/libs/libm/libm/lib_powl.c @@ -41,6 +41,22 @@ #ifdef CONFIG_HAVE_LONG_DOUBLE long double powl(long double b, long double e) { - return expl(e * logl(b)); + if (b > 0.0) + { + return expl(e * logl(b)); + } + else if (b < 0.0 && e == (int)e) + { + if ((int)e % 2 == 0) + { + return expl(e * logl(fabsl(b))); + } + else + { + return -expl(e * logl(fabsl(b))); + } + } + + return 0.0; } #endif