|
Boost : |
From: Gabriel Dos Reis (gdr_at_[hidden])
Date: 2003-07-13 03:11:20
Guillaume Melquiond <gmelquio_at_[hidden]> writes:
| On Fri, 4 Jul 2003, Fernando Cacciola wrote:
|
| > Gabriel Dos Reis <gdr_at_[hidden]> wrote in message
| > news:m31xx6i7tm.fsf_at_uniton.integrable-solutions.net...
| > > "jvd" <vygis_d_at_[hidden]> writes:
| > >
| > > | Dear boosters,
| > > |
| > > | seems like this code
| > > |
| > > | template< typename T >
| > > | bool is_nan( const T& v )
| > > | {
| > > | return std::numeric_limits<T>::has_quiet_NaN && (v != v);
| > > | }
| > > |
| > > | does not work correctly on some machines.
| > >
| > > Yes. It is an incorrect (unfortunately popular) implementation.
| > >
| > Right. We should say that more often. It is incorrect however popular.
|
| Yes, it is incorrect for C++. But it's something we can hope to see one
| day. For example, in the LIA-1 annex I about C langage bindings, it is
| written that != is a binding for IEEE-754 ?<> operator (unordered
| compare). In the C9X annex F.8.3 about relational operators, it is written
| that the optimization "x != x -> false" is not allowed since "The
| statement x != x is true if x is a NaN". And so on.
You seem to forget that C99 does not consider Signalling NaNs -- which
are other missing parts of C99. For those NaNs, the comparaison might
just trap.
Please, be careful when quoting.
-- Gaby
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk