public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Tejas Joshi <tejasjoshi9673@gmail.com>
To: gcc@gcc.gnu.org
Cc: joseph@codesourcery.com, Martin Jambor <mjambor@suse.cz>
Subject: Re: About GSOC.
Date: Tue, 07 May 2019 19:38:00 -0000	[thread overview]
Message-ID: <CACMrGjDFkKzH5Dwahe-yHF6crFLvsR-YQxNv8dJuNn2T=7Zg0g@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.21.1905071701330.3445@digraph.polyomino.org.uk>

Hello.
Thanks for your inputs.

If it is meant to be testing whether a value is halfway between two
integers, there are two things you need to test.  You need to test whether
the bit with value 0.5 is 0 or 1 (which this function doesn't seem to
test) - and you also need to test whether *all* bits below it are zero or
not (this function only appears to check bits in a single word,
disregarding all the lower words, which is not correct).

Hello.
As per my understanding, 3.5 would be represented in GCC as follows :
r->uexp  = 2
and
r->sig[2] = 1110000....00 in binary 64 bit. (first 2 bits being 3 and
following 1000....0 being 0.5, which later only happens for halfway cases)
So, if we clear out the significand part and the immediate bit to the right
which represent 0.5, the entire significand would become 0 due to bit-wise
ANDing.

> +  tempsig[w] &= (((unsigned long)1 << ((n % HOST_BITS_PER_LONG) - 1)) -
> 1);
>

That is what the following line intend to do. The clearing part would
change the significand, that's why significand was copied to a temporary
array for checking. This logic is inspired by the clear_significand_below
function. Or isn't this the way it was meant to be implemented? Also, why
unsigned long sig[SIGSZ] has to be an array?

If n % HOST_BITS_PER_LONG is 0, this code would shift by -1, which isn't
>

Yes, the condition checking is necessary here. I will incorporate the
changes and find a way to check if the number is even or odd bit-wise and
add test cases in the test suite as soon as possible.
Thanks.

Regards,
-Tejas

On Tue, 7 May 2019 at 22:47, Joseph Myers <joseph@codesourcery.com> wrote:

> On Sat, 4 May 2019, Tejas Joshi wrote:
>
> > Hello.
> > Taking the notes from Joseph under consideration, I have developed a
> > fairly working patch for roundeven, attached herewith.
>
> There are several issues here.  One key one is that you haven't added any
> testcases to the GCC testsuite.  I'd expect tests added that test lots of
> different inputs, for all the float, double and long double types, to
> verify the results are as expected.  That would include various exactly
> halfway cases - but also cases that are halfway plus or minus 1ulp.  Tests
> would be appropriately conditional on the floating-point formats as needed
> - testing for IEEE binary128 long double, on configurations that have that
> type, would help cover certain cases, such as where the integer part
> exceeds 2^64 but there is still a fractional part.
>
> Given tests and confirmation that they have passed in various
> configurations, it's a lot easier to have confidence in the code - and if
> possible issues are spotted in the code, they may point the way to missing
> tests.  That is, tests are a key piece of a patch that makes it much
> easier to review the patch.
>
> > I have done bit-wise calculations to check for halfway cases, though
> > HOST_WIDE_INT is only used to check for even and odd numbers (or is it
> > necessary to do bit-wise for this too?). Also, why unsigned long
>
> Yes, you need to use bit-wise checks for odd and even numbers, because you
> can have a nonzero fractional part with an integer part that is too big to
> be represented in HOST_WIDE_INT.  With IEEE binary128, you can have 112
> bits in the integer part and still have 0.5 as the fractional part.
>
> > diff --git a/gcc/real.c b/gcc/real.c
> > index f822ae82d61..533d471a89b 100644
> > --- a/gcc/real.c
> > +++ b/gcc/real.c
> > @@ -5010,6 +5010,43 @@ real_round (REAL_VALUE_TYPE *r, format_helper fmt,
> >      real_convert (r, fmt, r);
> >  }
> >
> > +bool
> > +is_halfway_below (const REAL_VALUE_TYPE *r)
> > +{
> > +  unsigned long tempsig[SIGSZ];
> > +  unsigned int n = SIGNIFICAND_BITS - REAL_EXP (r);
> > +  int i, w = n / HOST_BITS_PER_LONG;
> > +
> > +  for (i = 0; i < SIGSZ; ++i)
> > +    tempsig[i] = r->sig[i];
> > +
> > +  for (i = 0; i < w; ++i)
> > +    tempsig[i] = 0;
> > +
> > +  tempsig[w] &= (((unsigned long)1 << ((n % HOST_BITS_PER_LONG) - 1)) -
> 1);
> > +
> > +  if (tempsig[w] == 0)
> > +    return true;
>
> > +  return false;
>
> The logic in this function does not make sense to me.
>
> First, it needs a comment above the function defining its exact
> semantics.
> Since it lacks a comment, I have to guess based on the name.
>
> If it is meant to be testing whether a value is halfway between two
> integers, there are two things you need to test.  You need to test whether
> the bit with value 0.5 is 0 or 1 (which this function doesn't seem to
> test) - and you also need to test whether *all* bits below it are zero or
> not (this function only appears to check bits in a single word,
> disregarding all the lower words, which is not correct).
>
> If n % HOST_BITS_PER_LONG is 0, this code would shift by -1, which isn't
> valid.  You need to allow for cases where either the division between 0.5
> and 0.25, or the division between 0.5 and 1, falls exactly at a word
> boundary in the representation of the significand.  It would be a good
> idea to include various such cases in the tests you add to the testsuite.
>
> In any case, there is no need to copy the significand into a temporary
> array in order to test whether low bits are 0.
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
>

  reply	other threads:[~2019-05-07 19:38 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CACMrGjCeaZ7EoYqjLYiAJXjOtOfpJNo9zcbWhfarfkiLMN8YYA@mail.gmail.com>
2018-10-13  4:43 ` Tejas Joshi
2018-10-23 10:47   ` Martin Jambor
2018-10-23 16:51     ` Joseph Myers
2018-11-16 16:50       ` Tejas Joshi
2018-11-16 19:00         ` Joseph Myers
2019-01-21 19:13           ` Tejas Joshi
2019-01-21 23:03             ` Joseph Myers
2019-01-23  2:55               ` Tejas Joshi
2019-01-23  4:00                 ` Tejas Joshi
2019-01-23 17:37                   ` Joseph Myers
2019-01-25 19:52                     ` Tejas Joshi
2019-01-25 21:32                       ` Joseph Myers
2019-01-28 17:00                         ` Tejas Joshi
2019-02-04 14:39                           ` Tejas Joshi
2019-02-04 15:06                             ` Prathamesh Kulkarni
2019-02-04 15:56                               ` Tejas Joshi
2019-02-04 16:44                                 ` Prathamesh Kulkarni
2019-02-04 17:22                                   ` Tejas Joshi
2019-02-24 12:05                                     ` Tejas Joshi
2019-03-30 11:24                                       ` Tejas Joshi
2019-04-01 19:53                                         ` Joseph Myers
2019-04-04 13:04                                           ` Tejas Joshi
2019-05-04 11:20                                             ` Tejas Joshi
2019-05-07 17:18                                               ` Joseph Myers
2019-05-07 19:38                                                 ` Tejas Joshi [this message]
2019-05-07 21:01                                                   ` Joseph Myers
2019-05-08  3:27                                                     ` Tejas Joshi
2019-05-08  7:30                                                       ` Tejas Joshi
2019-05-08 14:21                                                         ` Tejas Joshi
2019-05-09 17:01                                                           ` Joseph Myers
2019-05-09 16:55                                                         ` Joseph Myers
2019-05-20 15:49                                                         ` Martin Jambor
2019-05-20 21:48                                                           ` Joseph Myers
2019-05-29 11:21                                                             ` Tejas Joshi
2019-05-29 18:45                                                               ` Tejas Joshi
2019-05-30 17:08                                                                 ` Martin Jambor
2019-05-30 21:38                                                                   ` Segher Boessenkool
2019-05-31 10:11                                                                     ` Martin Jambor
2019-05-31 10:28                                                                       ` Tejas Joshi
2019-06-03 16:38                                                                         ` Joseph Myers
2019-06-04  7:03                                                                           ` Tejas Joshi
2019-06-05 12:19                                                                             ` Tejas Joshi
2019-06-06 16:43                                                                             ` Joseph Myers
2019-06-09  4:48                                                                               ` Tejas Joshi
2019-06-10 20:26                                                                                 ` Joseph Myers
2019-06-12 18:52                                                                                   ` Tejas Joshi
2019-06-13 12:33                                                                                     ` Tejas Joshi
2019-06-13 17:19                                                                                       ` Expanding roundeven (Was: Re: About GSOC.) Martin Jambor
2019-06-13 21:16                                                                                         ` Joseph Myers
2019-06-14 12:49                                                                                         ` Tejas Joshi
2019-06-14 17:32                                                                                           ` Martin Jambor
2019-06-17  7:50                                                                                             ` Tejas Joshi
2019-06-17 17:15                                                                                               ` Joseph Myers
2019-06-19 13:32                                                                                                 ` Tejas Joshi
2019-06-22 17:11                                                                                                   ` Tejas Joshi
2019-06-22 17:37                                                                                                     ` Jan Hubicka
2019-06-17 17:10                                                                                             ` Joseph Myers
2019-05-31 11:13                                                                       ` About GSOC Segher Boessenkool
2019-05-31 11:16                                                                     ` Nathan Sidwell
2019-05-31 13:30                                                                       ` Eric Gallager
2019-06-03  9:37                                                                         ` Tejas Joshi
2019-06-06 16:56                                                                           ` Committing patches and other conventions (Was: Re: About GSOC) Martin Jambor
2019-06-09  4:57                                                                             ` Tejas Joshi
2019-06-12 13:48                                                                             ` Tejas Joshi
2019-06-13 17:02                                                                               ` Martin Jambor
2024-03-04  6:57 About gsoc mokshagnareddyc
2024-03-04 10:06 ` Jonathan Wakely
2024-03-05  2:02   ` Dave Blanchard
2024-03-05  9:31     ` Jonathan Wakely
2024-03-05  9:32       ` Jonathan Wakely
2024-03-11  1:17         ` Dave Blanchard
2024-03-11  9:08           ` Mark Wielaard
2024-03-07 12:26 ` Martin Jambor
2024-03-11 12:41 Julian Waters

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='CACMrGjDFkKzH5Dwahe-yHF6crFLvsR-YQxNv8dJuNn2T=7Zg0g@mail.gmail.com' \
    --to=tejasjoshi9673@gmail.com \
    --cc=gcc@gcc.gnu.org \
    --cc=joseph@codesourcery.com \
    --cc=mjambor@suse.cz \
    /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).