You can't store primitives in vars. But you can cast their contents to primitives with (long ...) (int ...) etc
David On Mon, Dec 5, 2011 at 12:16 PM, Linus Ericsson < oscarlinuserics...@gmail.com> wrote: > > > 2011/12/5 Stuart Sierra <the.stuart.sie...@gmail.com> > >> > (side note: what is different between Long/MAX_VALUE and the >> > function call (Long/MAX_VALUE)? >> >> None. Both are syntax sugar for (. Long MAX_VALUE) >> >> >> > It seems like unchecked-multiply doesn't like vars, but thats >> surprising. >> > What am I doing wrong here? >> >> unchecked-multiply only does unchecked arithmetic when the arguments are >> primitive. Vars cannot have primitive values, they must be boxed as >> java.lang.Long. So it reverts to normal Clojure arithmetic. >> >> The unchecked-* functions are intended as a performance optimization when >> doing operations with primitives. > > > OK, then the problem seems to be to refer to primitives with symbols with > unchecked-* functions. How do I do that? > > The loop where high performance is required is > > hash = -3750763034362895579 > for each byte b in array-of-bytes-to-be-hashed do : > hash = hash * 1099511628211 (without caring about overflowing) > hash = hash ^ byte > return hash > > and I really cannot see how to do this without using something that hold > values somehow, but how do I bypass the numeric stack in clojure? > > I have tried with the following approach (just for the first step): > > fnv> (def hash (Long. -3750763034362895579)) > #'fnv/hash > fnv> (def hash2 (Long. (unchecked-multiply hash 1099511628211))) > ; Evaluation aborted. (because of integer overflow) > > How should I do to get it working correctly? There simply must be a way to > store primitives, but I'm apparently have gotten something wrong here. > > (the hash in question is the quite quick FNV-hash, which is in public > domain, nice and everything) > > /Linus > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en