fixing bigint division bugs

This commit is contained in:
hyunghwan.chung
2019-04-03 19:19:09 +00:00
parent e6f58f4b3d
commit 98e5deca4f
2 changed files with 93 additions and 35 deletions

View File

@ -95,7 +95,7 @@ class MyObject.System.Stallion (selfns.Donkey)
var(#set,#get) x := MyObject.Code.FASTER3X, rvd.
var yyy.
var(#set,#get) zebra, qatar := MyObject.Code.FASTER2X.
method(#class) party { ^Party }
method(#class) system1 { ^System } ## Single word. can be looked up in the current workspace.
@ -119,6 +119,26 @@ extend MyObject
^(a value: 5) * (b value: 6). ## (12 * 5 + 22) * (99 * 6 + 4) => 49036
}
method(#class) testBigintDiv
{
| q r divd divr i |
i := 1.
while (i < 1000)
{
divd := 100919283908998345873248972389472389791283789123712899089034258903482398198123912831 * i.
divr := 129323482374892374238974238974238947328972389128387312892713891728391278 * i.
q := divd div: divr.
r := divd rem: divr.
ifnot (divd = (q * divr + r)) { divd dump. divr dump. q dump. r dump. ^false. }.
i := i + 1.
}.
^true
}
method(#class) main
{
| tc limit |
@ -324,6 +344,22 @@ extend MyObject
## 140-144
[ (-8113063330913503995887611892379812731289731289312898971231 rem: 34359738368) = -31040337503 ],
[ (-8113063330913503995887611892379812731289731289312898971231 mod: 34359738368) = 3319400865 ],
[ (-8113063330913503995887611892379812731289731289312898971231 div: 18446744073709551615) = -439810044444445199874532569660475732947 ],
[ (-8113063330913503995887611892379812731289731289312898971231 mdiv: 18446744073709551615) = -439810044444445199874532569660475732948 ],
[ (-8113063330913503995887611892379812731289731289312898971231 rem: 18446744073709551615) = -16637658201046411826 ],
## 145-149
[ (-8113063330913503995887611892379812731289731289312898971231 mod: 18446744073709551615) = 1809085872663139789 ],
[ (8113063330913503995887611892379812731289731289312898971231 div: 8113063330913503995887611892379812731289731289312898971231) = 1 ],
[ (8113063330913503995887611892379812731289731289312898971231 rem: 8113063330913503995887611892379812731289731289312898971231) = 0 ],
[ (8113063330913503995887611892379812731289731289312898971231 div: 8113063330913503995887611892379812731289731289312898971232) = 0 ],
[ (8113063330913503995887611892379812731289731289312898971231 rem: 8113063330913503995887611892379812731289731289312898971232) = 8113063330913503995887611892379812731289731289312898971231 ],
## 150-154
[ (8113063330913503995887611892379812731289731289312898971231 div: 8113063330913503995887611892379812731289731289312898971230) = 1 ],
[ (8113063330913503995887611892379812731289731289312898971231 rem: 8113063330913503995887611892379812731289731289312898971230) = 1 ],
[ self testBigintDiv ],
## =========================
[