![]() |
|
Message-ID: <20240612154410.GU10433@brightrain.aerifal.cx> Date: Wed, 12 Jun 2024 11:44:10 -0400 From: Rich Felker <dalias@...c.org> To: Meng Zhuo <mzh@....io> Cc: musl@...ts.openwall.com Subject: Re: [PATCH v3] math: add riscv64 round/roundf On Wed, Jun 12, 2024 at 11:31:05PM +0800, Meng Zhuo wrote: > --- > v2 -> v3: > * use x + x to check +-inf and NaN > --- > v1 -> v2: > * drop ±inf check and use fabs as Rich suggested > --- > src/math/riscv64/round.c | 21 +++++++++++++++++++++ > src/math/riscv64/roundf.c | 21 +++++++++++++++++++++ > 2 files changed, 42 insertions(+) > create mode 100644 src/math/riscv64/round.c > create mode 100644 src/math/riscv64/roundf.c > > diff --git a/src/math/riscv64/round.c b/src/math/riscv64/round.c > new file mode 100644 > index 00000000..28d05aed > --- /dev/null > +++ b/src/math/riscv64/round.c > @@ -0,0 +1,21 @@ > +#include <math.h> > + > +#if __riscv_flen >= 64 > + > +double round(double x) > +{ > + if (isnan(x + x)) return x; // if x is +-inf or nan > + if (fabs(x) >= 0x1p54) return x; Why? I already gave you a single expression that covers all these cases if you don't care about raising INVALID (I don't recall if that's allowed here): if (!(fabs(x) < 0x1p54)) return x; Your new x+x *does* raise INVALID, so it has no advantages. If the function needs to avoid raising INVALID, you need to check isnan(x) (or !isfinite(x) is probably better) separately like you were doing. We need to check this. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.