Subject: Re: [boost] [math] boost::math::isfinite fails with --fast-math
From: Gaetano Mendola (mendola_at_[hidden])
Date: 2012-11-26 08:33:45


On 11/26/2012 02:13 PM, John Maddock wrote:
>> I'm wandering if this is to be expected, the following code
>> fails if compiled with --fast-math:
>>
>> //====================================================
>> #include <boost/math/special_functions/fpclassify.hpp>
>> int main() {
>> const float a = 0.0f/0.0f;
>> assert(not boost::math::isfinite(a));
>> }
>
> Which fails - does the 0/0 actually yield an infinity? Or is it isfinite that fails?
>
> Either way is hard to make guarentees once you enable an option like that.

The following code:

#include <boost/math/special_functions/fpclassify.hpp>
int main() {
   const float a = 0.0f/0.0f;
   std::cout << "a => " << a << std::endl;
   std::cout << "boost::math::isfinite(a) => " << boost::math::isfinite(a) << std::endl;
   std::cout << "a != a: " << (a!=a ? "true" : "false") << std::endl;
}

gives:

a => nan
boost::math::isfinite(a) => 1
a != a: true

so I believe somehow even with --fast-math it should be possible to make it
"working" (if it has to be).

Gaetano