[Vm-dev] vm problem on cog and stack spur
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Sun Mar 27 13:25:58 UTC 2016
Hi Levente, thank you.
Here is a follow up:
I was able to reproduce the same symptom on the classical interpreter VM.
<rant> It's just that for MacOSX, there is no recent VM available, and that
the MacOS build is somehow abandonware, so it took much more time than
necessary :( </rant>
So the changes that have been integrated on Interpreter Vm in july 2014 and
that I thought correct were not.
It's certainly related to a LargeInteger plugin primitive.
Those are triggered when nbits of magnitude > 64.
(otherwise, <= 64 bits, the LargeInteger numbered primitives do their job).
Now the job is to produce/isolate an elementary failing LargeInteger test.
But you need to generate the VM from VMMaker.oscog head for COG/STACK
V3/SPUR 32/64 bits
or use a sufficiently recent interpreter VM (> july 2014) to trigger such
failure.
--------------------------------------------
Here is my starting point:
If you load ArbitraryPrecisionFloat and Tests from
http://www.squeaksource.com/ArbitraryPrecisionFl
then you'll see this strange pattern:
(53 to: 70) collect: [:i |
i -> (10 asArbitraryPrecisionFloatNumBits: i) erf ]
{53->(ArbitraryPrecisionFloat readFrom: '0.9999998981732067' readStream
numBits: 53) .
54->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 54) .
55->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 55) .
56->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 56) .
57->(ArbitraryPrecisionFloat readFrom: '0.99999989817320666' readStream
numBits: 57) .
58->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 58) .
59->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 59) .
60->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 60) .
61->(ArbitraryPrecisionFloat readFrom: '0.9999998981732066655' readStream
numBits: 61) .
62->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 62) .
63->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 63) .
64->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 64) .
65->(ArbitraryPrecisionFloat readFrom: '0.99999989817320666564' readStream
numBits: 65) .
66->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 66) .
67->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 67) .
68->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 68) .
69->(ArbitraryPrecisionFloat readFrom: '0.999999898173206665646'
readStream numBits: 69) .
70->(ArbitraryPrecisionFloat readFrom: '1.0' readStream numBits: 70)}
The value seems incorrect every four numbits
The exact value is near 1- 2.0e-45, and given the insufficient precision
requested, the result should be rounded to 1.
We can confirm with online high precision erf calculator like found for
example with http://keisan.casio.com/exec/system/1180573449
Or we can check with
(10 asArbitraryPrecisionFloatNumBits: 200) erf (ArbitraryPrecisionFloat
readFrom: '0.999999999999999999999999999999999999999999997911512416237455'
readStream numBits: 200)
-----------------------------
Note that when I change the LargeInteger digitLength to 32bits instead of 8
(my own VM branch) then the problem magically disappear.
I plan to introduce these change in the VMMaker.oscog, so I can as well
ignore the problem and proceed, however I much prefer to isolate it, and
understand it for gain of knowledge :)
2016-03-27 4:27 GMT+02:00 Levente Uzonyi <leves at caesar.elte.hu>:
>
> Hi Nicolas,
>
> If you give us a bit more detailed instructions about what to test, then
> we might be able to help you get this sorted out.
>
> Levente
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160327/799a6448/attachment-0001.htm
More information about the Vm-dev
mailing list