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.

Reply via email to