Thanks for the explanation, Meikel!

I'll wait for the next release which hopefully fixes the bug.

Cheers,

Dominikus

On Sep 8, 2:31 pm, "Meikel Brandmeyer (kotarak)" <m...@kotka.de>
wrote:
> Hi,
>
> Am Donnerstag, 8. September 2011 14:21:09 UTC+2 schrieb Dominikus:
>
>
>
> > Right, this feature is documented in
> >http://dev.clojure.org/display/doc/Documentation+for+1.3+Numerics
>
> > For me it feels somewhat strange to use "primed" operations to enforce
> > upgrade casting and to write a special faculty function for that.
>
> This is the trade-off between safe/fast and safe/slow.
>
> > I just discovered that (fact 21) breaks while (fact 21N) does not but
> > (fact 22N) does:
>
> > Weird!
>
> This is due to the fact, that the overflow in (fact 21) happens in the *.
> With (fact 21N) this works because the 21N promotes the * to a BigInt
> operation and (fact 20) still fits into a long. So everything works here.
> With (fact 22N) the (- 22N 1) demotes the 21 to a long (<-- Here is the bug)
> since it small enough to fit in there. Then we are in the (fact 21)
> situation again.
>
> Please keep in mind, that this behaviour is due to a bug in the current
> BigInt implementation! Normally a (fact 21N) would just work. The BigInt
> should use long arithmetic internally if possible. But the "re-promotion" to
> a "real" BigInt doesn't work correctly.
>
> Sincerely
> Meikel

-- 
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

Reply via email to