public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Joseph Myers <joseph@codesourcery.com>
To: Paul Zimmermann <Paul.Zimmermann@inria.fr>
Cc: <libc-alpha@sourceware.org>
Subject: Re: correctly rounded mathematical functions
Date: Wed, 5 Jan 2022 18:44:46 +0000	[thread overview]
Message-ID: <alpine.DEB.2.22.394.2201051815450.57194@digraph.polyomino.org.uk> (raw)
In-Reply-To: <mwzgoamaoq.fsf@tomate.loria.fr>

On Wed, 5 Jan 2022, Paul Zimmermann wrote:

> I see one solution: declare cr_xxx as an alias for xxx for all functions,
> and create corresponding bugzilla issues for those which are not (yet) CR.

That is contrary to recent practice for e.g. new Linux kernel syscalls, 
where we no longer tend to add emulations if they have problems such as 
race conditions meaning they are not a good emulation of the semantics of 
the syscall.  Presumably if someone uses cr_* it's because they need 
correct rounding, just as if they use pselect it's because they need to 
avoid a race (cf. bug 9813 criticising the emulation added before we 
tended to avoid such emulations).

Now, in the syscall case, the functions produce an ENOSYS error when the 
syscall is unavailable.  But that's not such a good idea for libm 
functions, given that users don't expect such functions to fail (other 
than domain/range/pole errors) and so won't check for such an error - and 
even if you use the stubs mechanism, that only produces a link-time 
warning, and while autoconf knows about not detecting as a available a 
function glibc defines only as a stub, other configuration systems might 
not.  So I think for these functions, not defining or declaring them at 
all when we don't have an implementation with the right semantics is the 
better approach - but it also introduces complexity in the installed 
headers.


One more consideration to mention: the cr_* names reserved in draft C23 
include some for functions that are new in C23 (from TS 18661-4) and not 
currently (except for the exp10 functions) supported by glibc.  It would 
be reasonable to say that we don't add cr_<func> before we have the 
underlying, not-correctly-rounded, function <func> (for all floating-point 
types and formats for all architectures) - so no cr_exp2m1 before we have 
exp2m1, for example.

I don't expect that to be a major issue, given that (a) most of those new 
functions can be implemented reasonably, if not as fast or precise as 
ideal, with fairly straightforward generic implementations in terms of 
other functions, (b) I expect the C99 functions are a priority for your 
correctly-rounded functions work over the newer ones and (c) when I get 
time I hope to implement those new functions for glibc if no-one else has 
done them by then, just as with other new C23 features.

Those new functions do have a soft dependency on MPFR support in order to 
generate expected test results (it's not impossible to add them without 
the MPFR support, but it means adding a local emulation in 
gen-auto-libm-tests), but most of that MPFR support is in current git MPFR 
(to be 4.2) - the main exception being that rootn with negative integer 
argument has no corresponding MPFR function.  (If gen-auto-libm-tests is 
to be usable on 32-bit hosts, which probably isn't that important, there 
would also be the issue that the MPFR functions for rootn and compoundn 
use unsigned long / long as their integer arguments but the C23 functions 
can have any integer argument in the range of signed long long int.)

-- 
Joseph S. Myers
joseph@codesourcery.com

  reply	other threads:[~2022-01-05 18:44 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-03 12:48 Paul Zimmermann
2022-01-04 19:15 ` Joseph Myers
2022-01-05 16:03   ` Paul Zimmermann
2022-01-05 18:44     ` Joseph Myers [this message]
2022-01-06  9:55       ` Paul Zimmermann
2022-01-12 22:17     ` Carlos O'Donell
2022-01-12 22:12 ` Carlos O'Donell
2022-01-13  5:00   ` Paul Zimmermann

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=alpine.DEB.2.22.394.2201051815450.57194@digraph.polyomino.org.uk \
    --to=joseph@codesourcery.com \
    --cc=Paul.Zimmermann@inria.fr \
    --cc=libc-alpha@sourceware.org \
    /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).