On Mon, Feb 2, 2015 at 8:08 PM, Donald Shepherd <donald.sheph...@gmail.com>

> sqlite3_bind_double calls sqlite3VdbeMemSetDouble which has a specific
> check against NaN.  My assumption is that this is what results in NaNs not
> round tripping and instead coming back out as SQLITE_NULL:
> SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
>   sqlite3VdbeMemSetNull(pMem);
>   if( !sqlite3IsNaN(val) ){
>     pMem->u.r = val;
>     pMem->flags = MEM_Real;
>   }
> }
> Richard answered on -0.0, i.e. it's a side effect of an optimization:

Someone mentioned the hardware representation of double & it being used in
the database. There are other formats in use, though the prevalence of the
x86 line of CPUs (particularly the 80387 coprocessor and the floating point
units included in 80486 & later chips [don't get me started on the 80486
SX, though]) have moved most of the world in the direction of the IEEE-754
1985 standard. Still, some processors don't have any floating point, some
have some type of fixed point, and yet others use completely different
binary representations of floating point numbers. Given how ubiquitous
IEEE-754 is in "modern" processors, I doubt there is anything in SQLite
that tries to accommodate any other floating point standards (though I
could be wrong).

If that is true (no other format support), the free SoftFloat library could
be used to provide floating point support on systems which do not support
IEEE-754 natively.

sqlite-users mailing list

Reply via email to