comp.lang.ada
 help / color / mirror / Atom feed
From: Jerry <lanceboyle@qwest.net>
Subject: Re: How to check a Float for NaN
Date: Tue, 6 May 2008 11:09:56 -0700 (PDT)
Date: 2008-05-06T11:09:56-07:00	[thread overview]
Message-ID: <97217ff4-aaf3-41ed-986c-8b6c0954e112@l28g2000prd.googlegroups.com> (raw)
In-Reply-To: 8ee4e946-786c-4faa-8c95-f9027083eb4b@p25g2000pri.googlegroups.com

On May 5, 1:49 pm, Adam Beneschan <a...@irvine.com> wrote:
> On May 5, 11:23 am, Martin Krischik <krisc...@users.sourceforge.net>
> wrote:
>
> > Jerry wrote:
> > > How would one check a Float or Long_Float if it has value NaN? The
> > > only ways that I can come up with are to import a C function (isnan, I
> > > think) or to write Long_Float'image(Some_Float) to a string and
> > > examine the first three characters to see if they are "NaN" (and that
> > > seems to be a GNAT implementation choice so might not be portable,
> > > which is OK for my use).
>
> > How about an Unchecked Conversion to an Unsigned_64 and comparing
>
> > >2#0111_1111_1111_0000_0000_0000_0000_0000#
>
> > Note that it's '>' as 2#0111_1111_1111_0000_0000_0000_0000_0000# is positive
> > infinity.
>
> Any negative float (including negative infinity) would be > than the
> binary number you give, since the leftmost bit (sign bit) would be 1.
> I think you need to clear the sign bit first, then your comparison
> will work:
>
>   Is_NaN := (To_Unsigned_64(X) and not
>               2#1000_0000_0000_0000_0000_0000_0000_0000#)
>              > 2#0111_1111_1111_0000_0000_0000_0000_0000#;
>
> But I haven't tried it.
>
>                                   -- Adam

I thought about doing something like this once I saw the bit patterns
on the Wikipedia page. However, I would guess that the bit pattern for
quiet and signaling NaNs is different, so the test would be somewhat
more complicated if one wanted to detect both types.

Jerry



  reply	other threads:[~2008-05-06 18:09 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-30 10:27 How to check a Float for NaN Jerry
2008-04-30 10:47 ` christoph.grein
2008-04-30 10:50   ` christoph.grein
2008-04-30 15:02     ` Adam Beneschan
2008-04-30 20:33       ` Jerry
2008-04-30 23:23         ` Adam Beneschan
2008-05-01  1:00           ` Adam Beneschan
2008-05-01 19:52             ` Keith Thompson
2008-05-01 23:57               ` Jerry
2008-04-30 23:29       ` Randy Brukardt
2008-05-01  8:04       ` Stuart
2008-05-01 14:38         ` Adam Beneschan
2008-05-01 17:14           ` Stuart
2008-05-01 19:22             ` Randy Brukardt
2008-05-02  0:04         ` Jerry
2008-04-30 20:36 ` Jerry
2008-04-30 21:53   ` Adam Beneschan
2008-05-01  1:05     ` Jerry
2014-05-22  7:27   ` jan.de.kruyf
2014-05-22  8:09     ` Dmitry A. Kazakov
2014-05-22  9:24       ` Simon Wright
2014-05-22  9:48         ` Dmitry A. Kazakov
2014-05-22 15:28           ` Adam Beneschan
2014-05-22 16:31             ` Dmitry A. Kazakov
2014-05-22 23:33               ` Adam Beneschan
2014-05-23  7:38                 ` Dmitry A. Kazakov
2014-05-23 21:39                 ` Randy Brukardt
2014-05-27  8:35                   ` Dmitry A. Kazakov
2014-05-27 12:35                   ` Maurizio Tomasi
2014-05-27 15:53                     ` Adam Beneschan
2014-05-27 22:35                       ` Randy Brukardt
2014-05-27 22:59                         ` Jeffrey Carter
2014-05-28  7:32                         ` Dmitry A. Kazakov
2014-05-28  8:40                       ` Maurizio Tomasi
2008-05-05 18:23 ` Martin Krischik
2008-05-05 20:49   ` Adam Beneschan
2008-05-06 18:09     ` Jerry [this message]
2008-05-06 18:45       ` Wiljan Derks
2008-05-06 22:18         ` Adam Beneschan
2008-05-07 22:56           ` Randy Brukardt
2008-05-07 22:56           ` Randy Brukardt
2008-05-07 23:20             ` Adam Beneschan
2008-05-09  7:24             ` Stephen Leake
2008-05-10 17:00   ` anon
2008-05-11 22:00     ` Keith Thompson
2008-05-12  2:01       ` anon
2008-05-09 19:49 ` anon
2008-05-10  2:36   ` Jerry
2008-05-10  3:53     ` anon
2008-05-10  6:24       ` christoph.grein
2008-05-10  8:05     ` Georg Bauhaus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox