Rounding of floating point values, per IEEE spec 754, rounds toward even.
The value exactly between 1.0 and its SmallDouble successor is precisely
h = 1.00000000000000011102230246251565404236316680908203125
This value rounds to 1.0.
A value slightly larger than h should round to 1.0000000000000002.
However, given a value slightly larger than h, such as
s = 1.000000000000000111023
On Linux versions with glibc earlier than 2.17, the SmallDouble created from s is incorrectly 1.0, rather than the correct result which is 1.0000000000000002.
The GemStone internal code that creates SmallDoubles from literals or String conversion uses the OS function strtod(). Linux kernels have a bug in this code: https://sourceware.org/bugzilla/show_bug.cgi?id=3479.
This Linux bug is fixed in glibc v2.17.
Last updated: 4/7/15