comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: How to check a Float for NaN
Date: Thu, 22 May 2014 18:31:12 +0200
Date: 2014-05-22T18:31:12+02:00	[thread overview]
Message-ID: <lgepht3eaqnx.jejhffsmjw03.dlg@40tude.net> (raw)
In-Reply-To: 6c8f74c9-4b4e-47a0-90e0-efa1ecdd5e2e@googlegroups.com

On Thu, 22 May 2014 08:28:33 -0700 (PDT), Adam Beneschan wrote:

> On Thursday, May 22, 2014 2:48:47 AM UTC-7, Dmitry A. Kazakov wrote:
>> On Thu, 22 May 2014 10:24:35 +0100, Simon Wright wrote:
>> 
>>> "Dmitry A. Kazakov" writes:
>> 
>>>> On Thu, 22 May 2014 00:27:02 -0700 (PDT), jan.de.kruyf wrote:
> 
>>>>>       if Cos_Theta /= Cos_Theta then
>> 
>>>>> 	 Gct.Trace (Debug_Str, "cos_theta is NaN******");
>> 
>>>>>       else
>> 
>>>>> 	 Gct.Trace (Debug_Str, "cos_theta : " & Long_Float'Image (Cos_Theta)); 
>> 
>>>>>       end if;
>> 
>>>>> 
>> 
>>>>> gives this in the log:
>> 
>>>>> 
>> 
>>>>> [MATH3D.DEBUG] 1/372 cos_theta is NaN****** (2014-05-22 09:23:24.155)(loc: math3d.adb:129)
>> 
>>>>> 
>> 
>>>>> Hope it helps someone;
>> 
>>>>
>> 
>>>> You could simply use range check:
> 
>>>>    X in Long_Float'Range
> 
>>>> NaN is not a number and thus outside the range.
> 
>>> This would also return False for +/-Inf, so if the OP wants specifically
>>> to check for NaN it wouldn't do. Can't think why they would, though.
> 
>>> GNAT says about "X in Long_Float'Range"
>> 
>>>    inf.adb:10:60: warning: explicit membership test may be optimized away
> 
>> Looks like a bug, it may not be optimized away if Long_Float is IEEE 754.
> 
>>>    inf.adb:10:60: warning: use 'Valid attribute instead
>  
>> Hmm, reading RM 13.9.2 makes me believe that NaN's 'Valid should yield
>> True.
> 
> No, I don't think so.  3.5.7(8) says "The set of values for a floating
> point type is the (infinite) set of rational numbers."  This excludes NaN
> and infinities, which are not rational numbers (nor any kind of number).

These are not values of Long_Float. I guess that values of Long_Float are
"machine numbers" defined in the following sentence.

Why doesn't it preclude NaN returned and accepted by arithmetic operations?
Either 3.5.7 lies or the operations do.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2014-05-22 16:31 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 [this message]
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
2008-05-06 18:45       ` Wiljan Derks
2008-05-06 22:18         ` Adam Beneschan
2008-05-07 22:56           ` Randy Brukardt
2008-05-07 23:20             ` Adam Beneschan
2008-05-09  7:24             ` Stephen Leake
2008-05-07 22:56           ` Randy Brukardt
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