diff options
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/util.c b/src/util.c index 46dc5cb53..548c6d6fb 100644 --- a/src/util.c +++ b/src/util.c @@ -14,7 +14,7 @@ ** This file contains functions for allocating memory, comparing ** strings, and stuff like that. ** -** $Id: util.c,v 1.225 2008/05/01 02:47:04 shane Exp $ +** $Id: util.c,v 1.226 2008/05/09 03:07:34 drh Exp $ */ #include "sqliteInt.h" #include <stdarg.h> @@ -25,8 +25,19 @@ ** Return true if the floating point value is Not a Number. */ int sqlite3IsNaN(double x){ +#if 0 + /* This reportedly fails when compiled with -ffinite-math-only */ volatile double y = x; return x!=y; +#endif + /* We have to look at bit patterns to accurately determine NaN. + ** See ticket #3101 and + ** https://mail.mozilla.org/pipermail/tamarin-devel/2008-February/000325.html + */ + sqlite3_uint64 y = *(sqlite3_uint64*)&x; + assert( sizeof(x)==sizeof(y) ); + y &= (((sqlite3_uint64)0x80000000)<<32)-1; + return y > (((sqlite3_uint64)0x7ff00000)<<32); } /* |