Those numbers look like pointers interpreted as fixnums. So my guess as to why they differ so much is that between each operation, you call `printf`, which allocates enough to claim the addresses between, e.g., 70112357026588 and 70112357038692. So that next time around the loop, the result of the `bitwise-and` lives at 70112357038692.
Just a guess, though. Vincent On Fri, 14 Oct 2016 01:11:56 -0500, [email protected] wrote: > > Do you have any guess why the resulting numbers vary so much? > > On Thursday, October 13, 2016 at 7:20:47 PM UTC+2, mflatt wrote: > > Thanks for the report! > > This is a bug in the optimizer's handling of `bitwise-and`, where I > made it assume a fixnum result if either argument is a fixnum. > That's > obviously not correct if the fixnum is negative. I'll push a repair. > > The difference you see when running in a module is because the > optimizer constant-folds the calculation, so there's no `bitwise-and > ` > call left to make incorrect assumptions about. > > At Thu, 13 Oct 2016 09:17:52 -0700 (PDT), [email protected] wrote: > > Hi all, > > > > I get a weird behavior when using bitwise-ior and bitwise-and with > large > > numbers. Tested on 2 machines (racket 6.6, Ubuntu 16.04 and > 14.04): > > > > Here is the test example: > > > > #lang racket > > (define num #xffffffffffffffff) ;; remove one f, and the results > are fine > > in both cases > > (for ([i 5]) > > (printf "~a~n" (bitwise-ior (bitwise-and num -2) 0))) > > > > > > When run from DrRacket using ctr+r, it works properly: > > 18446744073709551614 > > 18446744073709551614 > > 18446744073709551614 > > 18446744073709551614 > > 18446744073709551614 > > > > When pasted into DrRacket's REPL (or run from command line via > "racket > > random-bug.rkt"), the code does not only produce wrong result, but > also > > seems to be counting something :) > > 70112357026588 > > 70112357038692 > > 70112357043588 > > 70112357048576 > > 70112357053344 > > > > Removing one "f" from the test number results in correct behavior > in both > > cases. > > Very large numbers are are reduced to the same range (around 54 > bits). > > Replacing the expression (bitwise-and num -2) by the corresponding > number > > it computes results in correct behavior. > > > > Cheers, > > Peter > > > > -- > > You received this message because you are subscribed to the Google > Groups > > "Racket Developers" group. > > To unsubscribe from this group and stop receiving emails from it, > send an > > email to [email protected]. > > To post to this group, send email to [email protected]. > > To view this discussion on the web visit > > > > https://groups.google.com/d/msgid/racket-dev/d0310d90-0d88-4902-b430-0069b310d7 > > > a3%40googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google > Groups "Racket Developers" group. > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/racket-dev/c4b51560-736a-4a19-9b9f-0b28f4de66cb%40googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Racket Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-dev/m2d1j3yuj4.wl-stamourv%40eecs.northwestern.edu. For more options, visit https://groups.google.com/d/optout.
