You can add Chez Scheme to the list of those that gets the correct answer 23163662.
Perhaps (+ (* a x) b) is calculated exactly but the modulo operator uses inexact arithmetic internally; you mentioned that the returned value was inexact. When I do (modulo (+ (* (exact->inexact a) (exact->inexact x)) (exact->inexact b)) (expt 2.0 32) I get 23163648.0. On Sat, Aug 28, 2010 at 6:19 AM, Jeronimo Pellegrini <j...@aleph0.info>wrote: > Hello, > > I was writing a simple PRNG for didatic purposes and found > that in Chicken, modulo may or may not return an exact > integer -- whic is OK, I can just do inexact->exact. > But it seems also that the value varies among systems: > > #;1> (define a 1103515245) > #;2> (define b 12345) > #;3> (define m (expt 2 32)) > #;4> (define x 631629065) > #;5> (modulo (+ (* a x) b) m) > 23163648.0 > #;6> (+ (* a x) b) > 697012302412608270 > > Octave also gives me 23163648: > octave:2> mod((1103515245*631629065 + 12345),(2^32)) > ans = 23163648 > > From Gambit, and SBCL I get 23163662. > > Gambit v4.6.0 > > (define a 1103515245) > > (define b 12345) > > (define m (expt 2 32)) > > (define x 631629065) > > (modulo (+ (* a x) b) m) > 23163662 > > (+ (* a x) b) > 697012302412608270 > > (Same for Chibi, Gauche and Bigloo) > > > SBCL: > > * (setq a 1103515245) > * (setq b 12345) > * (setq m (expt 2 32)) > * (setq x 631629065) > * (mod (+ (* a x) b) m) > > 23163662 > * (+ (* a x) b) > > 697012302412608270 > > Maxima also answers 23163662 and 697012302412608270. > > What puzzles me is that the large value (before taking the modulo) > is 697012302412608270 in all systems, but Chiken and Octave will > still return 23163648 from modulo, so it's not that the larger value > was not represented exactly. Why then is 23163648 returned? > > I'm not using the numbers egg (I'd like students to do as much as > possible from scratch, using standard Scheme) > > I'm using Chicken from git, master branch, compiled oon a 64-bit > machine, so I suppose I can represent all these numbers without > problems: > > CHICKEN > (c)2008-2010 The Chicken Team > (c)2000-2007 Felix L. Winkelmann > Version 4.6.0rc1 > linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ] > compiled 2010-08-09 on newton (Linux) > > J. > > > _______________________________________________ > Chicken-users mailing list > Chicken-users@nongnu.org > http://lists.nongnu.org/mailman/listinfo/chicken-users >
_______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users