[Vm-dev] [OpenSmalltalk/opensmalltalk-vm] Bug in primitive 551 (SmallFloat64>> truncated) (#376)

Juan Vuletich notifications at github.com
Tue Mar 12 17:20:48 UTC 2019

There is 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 result)
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.

You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20190312/fa909e37/attachment.html>

More information about the Vm-dev mailing list