From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: Stefan Kanthak <stefan.kanthak@nexgo.de>,
Joseph Myers <joseph@codesourcery.com>
Cc: Szabolcs Nagy <szabolcs.nagy@arm.com>,
libc-help@sourceware.org, libc-alpha@sourceware.org
Subject: Re: [PATCH/2nd version] Re: nextafter() about an order of magnitude slower than trivial implementation
Date: Mon, 23 Aug 2021 09:50:35 -0300 [thread overview]
Message-ID: <3bd22d9b-dd89-d5f1-c282-3e5927f991d1@linaro.org> (raw)
In-Reply-To: <2246A49E9E024DDBB9AF9C212B29712A@H270>
On 20/08/2021 17:19, Stefan Kanthak wrote:
> "Joseph Myers" <joseph@codesourcery.com> wrote:
>
>> On Fri, 20 Aug 2021, Stefan Kanthak wrote:
>>
>>> if(ax > 0x7ffull << 53) /* x is nan */
>>> return x;
>>> if(ay > 0x7ffull << 53) /* y is nan */
>>> return y;
>>
>> How has this been tested? I'd have expected it to fail the nextafter
>> tests in the glibc testsuite (libm-test-nextafter.inc), because they
>> verify that sNaN arguments produce a qNaN result with the "invalid"
>> exception raised, and this looks like it would just return an sNaN
>> argument unchanged.
>
> It doesn't look like it would, it REALLY does!
> As I explicitly wrote, my changes avoid FP operations if possible.
>
> <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nextafter.html>
>
> | If x or y is NaN, a NaN shall be returned.
>
> I choose to return the argument NaN, what both POSIX and ISO C allow.
> If my mind serves me well, one of the former editions even stated
> "If an argument is NaN, this argument shall be returned". This may
> but be influenced/spoiled by
> <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/nextafter-functions>
>
> | If either x or y is a NAN, then the return value is one of the input NANs.
>
>
> If that bothers you, change these 4 lines to either
>
> if(ax > 0x7ffull << 53) /* x is nan */
> return 0.0 + x;
> if(ay > 0x7ffull << 53) /* y is nan */
> return 0.0 + y;
>
> (the addition has eventually to be guarded from optimisation) or
>
> if(ax > 0x7ffull << 53 /* x is nan */
> || ay > 0x7ffull << 53) /* y is nan */
> return x + y;
Sorry, but sending half-baked patches where one will need to evaluate
and decide which is the best strategy is not the best way forward to
accept this change.
Please do follow the contributor checklist [1] and the suggestion I
gave you when you asked for input in the libc-help:
* Check for regressions by testing your patch against glibc testsuite
(make check). As Joseph has put, your patch triggers a lot of
regressions:
$ grep ^FAIL math/subdir-tests.sum
FAIL: math/bug-nextafter
FAIL: math/test-double-nextafter
FAIL: math/test-float32x-nextafter
FAIL: math/test-float64-nextafter
FAIL: math/test-misc
* You removed the copyright since it is a new implementation, but
the any code still requires a Copyright (even if is not assigned
to FSF). Check the item 3.4 on the Contributor checklist.
* Also, since is a new implementation follow the usual style and
code guidelines instead of using the current one used.
* It would be good to add a benchmark to evaluate this change if
the motivation for your change is performance. Follow what
other math benchmarks does on benchtests (exp2 or exp10 for
instance).
* Sending a patch with a define switch and stating "Choose whatever
you like best" does not help in anything and put the burden or
evaluating your change to the maintainers.
[1] https://sourceware.org/glibc/wiki/Contribution%20checklist
prev parent reply other threads:[~2021-08-23 12:50 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-16 16:03 Stefan Kanthak
2021-08-18 12:51 ` Szabolcs Nagy
2021-08-18 17:11 ` Stefan Kanthak
2021-08-19 11:20 ` Adhemerval Zanella
2021-08-19 17:57 ` [PATCH] " Stefan Kanthak
2021-08-20 9:52 ` [PATCH/2nd version] " Stefan Kanthak
2021-08-20 16:55 ` Joseph Myers
2021-08-20 20:19 ` Stefan Kanthak
2021-08-20 21:03 ` Joseph Myers
2021-08-23 12:50 ` Adhemerval Zanella [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3bd22d9b-dd89-d5f1-c282-3e5927f991d1@linaro.org \
--to=adhemerval.zanella@linaro.org \
--cc=joseph@codesourcery.com \
--cc=libc-alpha@sourceware.org \
--cc=libc-help@sourceware.org \
--cc=stefan.kanthak@nexgo.de \
--cc=szabolcs.nagy@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).