[Vm-dev] Bug in primitive 551 (SmallFloat64>> truncated)

Juan Vuletich JuanVuletich at zoho.com
Tue Mar 12 15:05:26 UTC 2019

Hi Folks,

I just found a bug in an edge case in #truncated primitive in 64 bits 
Cog Spur (tested on Linux, both in Cuis and Squeak). It is when 
#truncated a Float that is slightly larger than SmallInteger maxVal.

SmallInteger maxVal   -->  1152921504606846975

If we take (1152921504606846975.0 predecessor), to ensure a Float that 
still fits in a SmallInteger, everything works fine:

1152921504606846975.0 predecessor asTrueFraction   -->  1152921504606846848
1152921504606846975.0 predecessor asTrueFraction   -->  class SmallInteger
1152921504606846975.0 predecessor truncated   -->  1152921504606846848

But taking 1152921504606846976.0:

1152921504606846976.0 asTrueFraction   -->  1152921504606846976 (correct 
1152921504606846976.0 asTrueFraction class   -->  LargePositiveInteger 
(ok. Doesn't fit in SmallInteger)
1152921504606846976.0 truncated   -->  -1152921504606846976

The primitive is answering SmallInteger minVal, (a negative number!) but 
it should fail, as the correct result doesn't fit in a SmallInteger.


Juan Vuletich

More information about the Vm-dev mailing list