mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Szabolcs Nagy <nsz@port70.net>
To: musl@lists.openwall.com, Ruinland ChuanTzu Tsai <ruinland@andestech.com>
Cc: alankao@andestech.com
Subject: Re: math/powf regression on d28cd0ad commit
Date: Wed, 4 Dec 2019 10:33:06 +0100	[thread overview]
Message-ID: <20191204093304.GH23985@port70.net> (raw)
In-Reply-To: <20191204021045.GA10870@APC301.andestech.com>

* Ruinland ChuanTzu Tsai <ruinland@andestech.com> [2019-12-04 10:10:45 +0800]:
> Hi musl fellows,
> sorry for making the noise again.
> 
> Yet I encountered a regression of libc-test's math/powf on x86_64 and
> RV64 during the transitions from v1.1.22 to v1.1.23. After bisecting, I
> managed to locate the commit that breaks powf() test to be d28cd0ad ,
> which introduces a new implementation of powf().
> 
> Fail log is shown as follow :
> 
> src/math/ucb/powf.h:103: bad fp exception: RU powf(0x1.fffffep+127,0x1p+0)=0x1.fffffep+127, want 0 got INEXACT|OVERFLOW 
> X src/math/ucb/powf.h:530: bad fp exception: RN powf(0x1.fffff8p-127,0x1p+0)=0x1.fffff8p-127, want 0 got INEXACT|UNDERFLOW
> X src/math/ucb/powf.h:533: bad fp exception: RN powf(0x1.fffffcp-127,0x1p+0)=0x1.fffffcp-127, want 0 got INEXACT|UNDERFLOW
> X src/math/ucb/powf.h:719: bad fp exception: RN powf(-0x1.fffff8p-127,0x1p+0)=-0x1.fffff8p-127, want 0 got INEXACT|UNDERFLOW
> X src/math/ucb/powf.h:722: bad fp exception: RN powf(-0x1.fffffcp-127,0x1p+0)=-0x1.fffffcp-127, want 0 got INEXACT|UNDERFLOW
> FAIL ./src/math/powf.exe [status 1]
> 
> I took a quick investigation on the RU powf(0x1.fffffep+127,0x1p+0).
> In the very end of powf() , a "y", which is a little bit larger than the
> expected outcome, gets passed to eval_as_float(). Since we're rounding-
> up, it will become an INF, causing the testcase to fail.
> 
> It makes me wonder whether the old implementation is safe enough for
> someone to revert this change by her/his own ? ( I reverted the change
> for testing. It seems to be side-effect free ? )

i don't think it's a good idea to revert to old powf.

there are issues around overflow and underflow in *non-nearest*
rounding modes. i may try to fix that, but it's low priority.

other libcs are completely broken in such modes, so you won't
find any software that depends on math library behaviour in
non-default rounding. (e.g. in musl sin/cos/tan has huge errors
in non-nearest rounding, so we have no guarantees), worse than
that: most compilers/language implementations don't support
non-nearest rounding at all (all languages other than c and
fortran and most optimizing c implementations like llvm don't
support non-default rounding at all, gcc -frounding-math is
an exception)

other libcs don't guarantee the behaviour on exact underflow
either: raising undeflow spuriously is acceptable then.

glibc uses the same powf, android uses the same powf.

if you find actual real world cases where this matters then
let me know.

the tests are there so we can test corner-case behaviour.


      reply	other threads:[~2019-12-04  9:33 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-04  2:10 Ruinland ChuanTzu Tsai
2019-12-04  9:33 ` Szabolcs Nagy [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=20191204093304.GH23985@port70.net \
    --to=nsz@port70.net \
    --cc=alankao@andestech.com \
    --cc=musl@lists.openwall.com \
    --cc=ruinland@andestech.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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

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 NNTP newsgroup(s).