Re: [Caml-list] Parsing 64-bit ints in 32-bit OCaml
Jon Harrop a écrit : I'm just trying to write efficient functions for div and mod by three. I'd like to handle 32- and 64-bit machines with the same code so I tried: let gcd3 = match Sys.word_size with | 32 - 715827883 | 64 - 3074457345618258603 | _ - failwith Unknown word size That works perfectly in 64-bit but breaks OCaml's parser in 32-bit, which dies with: Integer literal exceeds the range of representable integers of type int As a workaround, I replaced it with: | 64 - Int64.to_int 3074457345618258603L Is there a better workaround? I also bump into the same problem from time to time, and I usually replace the large constant by a (launch time) computation, such as (0x lsl 16) lor 0x for 0x for instance. In your case, it could simply be (3074457 * 100 + 345618) * 100 + 258603 But your solution is equally good (the int64 is boxed but is simpler to read). -- Jean-Christophe ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
[Caml-list] Parsing 64-bit ints in 32-bit OCaml
I'm just trying to write efficient functions for div and mod by three. I'd like to handle 32- and 64-bit machines with the same code so I tried: let gcd3 = match Sys.word_size with | 32 - 715827883 | 64 - 3074457345618258603 | _ - failwith Unknown word size That works perfectly in 64-bit but breaks OCaml's parser in 32-bit, which dies with: Integer literal exceeds the range of representable integers of type int As a workaround, I replaced it with: | 64 - Int64.to_int 3074457345618258603L Is there a better workaround? -- Dr Jon Harrop, Flying Frog Consultancy Ltd. http://www.ffconsultancy.com/?e ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
Re: [Caml-list] Parsing 64-bit ints in 32-bit OCaml
Jon Harrop wrote: Is there a better workaround? A (maybe overkill) solution is to use optcomp [1]. What you have to do is to add word_size variable: Pa_optcomp.define word_size (Int Sys.word_size) Then you can write: let gcd3 = #if word_size = 32 715827883 #elif word_size = 64 3074457345618258603 #else # error unknown word size #endif Jérémie [1] http://forge.ocamlcore.org/projects/optcomp/ ___ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs