Hello,

I’ve been tracking down an odd problem where some of our results from an 
application defined SQLite function are coming back as infinity on some 
platforms (notably 32-bit Android, and all Windows).  I’ve narrowed it down to 
the following:

Given the example input "1.7976931348623153e+308" encoded as UTF-8, the 
following lines of code have the following results (z is the const char* 
variable holding the text):

double value = strtod(z, NULL); // value holds 1.7976931348623153E+308
sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8); // value now hold +Inf

My theory as to why this varies by platform is because of the use of long 
double during this calculation, which can vary in size.  On the failing 
platforms they are the same size as regular double.  This results in a rounding 
error of the "scale" portion of the calculation (via sqlite3Pow10) which 
results in a false infinity.

Would this be considered a bug, or is precision not guaranteed to the same 
level as strtod because of other factors?

Jim Borden
Senior Software Engineer
e: jim.bor...@couchbase.com
t: @borrrden



Privacy Policy<http://www.couchbase.com/privacy-policy>
Marketing 
Preferences<http://info.couchbase.com/unsubscribe-or-manage-preferences>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to