[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
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.
Thanks,
--
Juan Vuletich
www.cuis-smalltalk.org
https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev
https://github.com/jvuletich
https://www.linkedin.com/in/juan-vuletich-75611b3
@JuanVuletich
More information about the Vm-dev
mailing list