fixing bigint division bugs
This commit is contained in:
@ -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 ],
|
||||
|
||||
|
||||
## =========================
|
||||
[
|
||||
|
Reference in New Issue
Block a user