<p dir="ltr">If you type check the file on a 64-bit system like yours, but then ran it on a 32-bit system, the fixnum range would change, making that number into a bignum.</p>
<p dir="ltr">Sam</p>
<div class="gmail_quote">On Sep 6, 2014 8:37 AM, "John Clements" <<a href="mailto:johnbclements@gmail.com">johnbclements@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Is this a bug, or just a known limitation of typed racket? It looks like a fixnum can be up to 2^61, but the type checker for integer literals doesn't like them. This program:<br><br>#lang typed/racket<br><br>(require racket/fixnum)<br><br>(define (ensure-fixnum i)<br>  (cond [(fixnum? i) i]<br>        [else (error 'ensure-fixnum)]))<br><br>(fixnum? 281474976710656) ;; -> #t<br>(: i Fixnum)<br>(define i (ensure-fixnum 281474976710656))<br><br>works fine, but requires the ensure-fixnum, because the type checker does not believe that the literal 281474976710656 lives in fixnum.<br><br>You can also see this at the top level, using (:print-type 281474976710656)<br><br></div><div>Is this a bug, or is this just a known compromise to simplify the type-checker's portability and numeric tower?<br><br></div><div>John<br></div><div><br><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Sep 4, 2014 at 12:35 PM, Vincent St-Amour <span dir="ltr"><<a href="mailto:stamourv@ccs.neu.edu" target="_blank">stamourv@ccs.neu.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Would an fxvector of length 5 (to account for the tag bits) work?<br>
<br>
If all you're doing is bitwise ops and comparisons, it should be easy to<br>
convince TR that you're staying within fixnum range.<br>
<br>
Vincent<br>
<br>
<br>
<br>
<br>
At Thu, 4 Sep 2014 10:45:48 -0700,<br>
John Clements wrote:<br>
><br>
> [1  <multipart/alternative (7bit)>]<br>
> [1.1  <text/plain; UTF-8 (quoted-printable)>]<br>
<div><div>> I want to represent a bitfield of 125 bits, using typed racket. I’ll be<br>
> combining them using bitwise operations, and checking for zero-ness. I<br>
> think that’s about it.<br>
><br>
> I could just use type Integer, but it seems like that would impose<br>
> additional checking, since the type system doesn’t know the size.  In<br>
> untyped racket I used a vector of four integers in the range 0-2^32, but<br>
> those don’t fit in typed Racket’s “Fixnum” because it uses a signed<br>
> representation (and indeed, untyped racket may have been falling prey to<br>
> the same problem. Perhaps I should break it up into four integers in the<br>
> range 0-2^31? That seems weird, but maybe that’s my best choice? Or… I<br>
> could use a byte string.<br>
><br>
> Apologies if I’m missing something in the docs, here; I’ve spent a few<br>
> minutes searching, without turning anything up.<br>
><br>
> Thanks for any advice,<br>
><br>
> John<br>
</div></div>> [1.2  <text/html; UTF-8 (quoted-printable)>]<br>
><br>
> [2  <text/plain; us-ascii (7bit)>]<br>
<div><div>> ____________________<br>
>   Racket Users list:<br>
>   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br></div>
<br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div>