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/20161013172043.432DE65007A%40mail-svr1.cs.utah.edu. For more options, visit https://groups.google.com/d/optout.
