[Vm-dev] vm crash when using rairedTo: with fractions

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Thu Aug 10 19:27:59 UTC 2017


Hi Andrei,
indeed, the method does not scale well...

If the result is an exact Fraction, then it will answer the Fraction.
Else if not exact, it will be converted to a Float.

The problem is that it will try to answer nearest Float with a rather naive
algorithm.
Moreover, computing the nthRoot: first, then raising the result to the
power of numerator will cumulate rounding errors.
So trying to get a very accurate nthRoot: first in case of Float result is
not a good strategy anyway.

Why the VM crashes exactly is another problem and remains to see, we'd
prefer an Exception.

As a workaround, I suggest sending asFloat to the receiver and/or operand.


2017-08-10 12:02 GMT+02:00 Andrei Chis <chisvasileandrei at gmail.com>:

>
> Hi,
>
> I was executing this code  '(2009/2000) ** (3958333/100000)' with the
> Pharo6.1 distribution and the vm crashed with she stack attached below.
> Tried it on both mac and windows 10.
> Seems that #raisedTo: has a special case for fractions that ends up
> calling #nthRoot: like '2009 nthRoot: 100000' leading to the crash.
>
> Cheers,
> Andrei
>
>
> 0xaddeac M LargePositiveInteger(Integer)>quo: 0x314093e8: a(n)
> LargePositiveInteger
> 0xaddec8 M LargePositiveInteger(LargeInteger)>quo: 0x314093e8: a(n)
> LargePositiveInteger
> 0xaddee8 M LargePositiveInteger(Integer)>// 0x314093e8: a(n)
> LargePositiveInteger
> 0xaddf04 M LargePositiveInteger(LargeInteger)>// 0x314093e8: a(n)
> LargePositiveInteger
> 0xaddf34 I LargePositiveInteger(Integer)>nthRootTruncated: 0x30cc8350:
> a(n) LargePositiveInteger
> 0xaddf5c I LargePositiveInteger(Integer)>nthRootRounded: 0x30cc8350: a(n)
> LargePositiveInteger
> 0xaddf88 I SmallInteger(Integer)>nthRoot: 0xfb3=2009
> 0xaddfb4 I Fraction>nthRoot: 0x4f9a940: a(n) Fraction
> 0xaddfd8 I Fraction(Number)>raisedTo: 0x4f9a940: a(n) Fraction
> 0xaddffc I Fraction(Number)>** 0x4f9a940: a(n) Fraction
> 0xade018 M UndefinedObject>DoIt 0x5fe5d00: a(n) UndefinedObject
> 0xade048 I OpalCompiler>evaluate 0x4f9a998: a(n) OpalCompiler
> 0xade074 I RubSmalltalkEditor>evaluate:andDo: 0x305e5878: a(n)
> RubSmalltalkEditor
> 0xade09c I RubSmalltalkEditor>highlightEvaluateAndDo: 0x305e5878: a(n)
> RubSmalltalkEditor
> 0xade0b8 M GLMMorphicPharoScriptRenderer(GLMMorphicPharoCodeRenderer)>popupPrint
> 0x3062fdc8: a(n) GLMMorphicPharoScri
> enderer
> 0xade0d8 I MorphicAlarm(MessageSend)>value 0x4f9ab20: a(n) MorphicAlarm
> 0xade0f4 M MorphicAlarm>value: 0x4f9ab20: a(n) MorphicAlarm
> 0xade114 M WorldState>triggerAlarmsBefore: 0x71bb5e0: a(n) WorldState
> 0xade140 M WorldState>runLocalStepMethodsIn: 0x71bb5e0: a(n) WorldState
> 0xade164 M WorldState>runStepMethodsIn: 0x71bb5e0: a(n) WorldState
> 0xade180 M WorldMorph>runStepMethods 0x6ab7778: a(n) WorldMorph
> 0xade198 M WorldState>doOneCycleNowFor: 0x71bb5e0: a(n) WorldState
> 0xade1b4 M WorldState>doOneCycleFor: 0x71bb5e0: a(n) WorldState
> 0xade1d0 M WorldMorph>doOneCycle 0x6ab7778: a(n) WorldMorph
> 0xade1e8 M WorldMorph class>doOneCycle 0x6a9f960: a(n) WorldMorph class
> 0xade200 M [] in MorphicUIManager>spawnNewProcess 0x2cc88718: a(n)
> MorphicUIManager
> 0xade220 I [] in BlockClosure>newProcess 0x2f178150: a(n) BlockClosure
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20170810/46459509/attachment.html>


More information about the Vm-dev mailing list