From: Tom M Date: 2007-09-27T03:40:14+09:00 Subject: Re: Best way to create Bignum from C extension On Sep 25, 1:32 pm, Tom Werner wrote: > I've been hand-translating some Ruby code into C for an extension and > have come across the need to create and return a Bignum from the > extension. I see that there is a macro INT2NUM that will produce a > Bignum from long or long long, but what is the best way to create an > arbitrarily sized Bignum from a byte array packed as: > > [a, b, c] -> (a * (256 ** 0)) + (b * (256 ** 1)) + (c * (256 ** 2)) > > in other words, reversing the array and flatting it would produce the > correct binary representation of the number. > > I tried creating a Fixnum with INT2FIX(0) and then using rb_funcalls to > incrementally construct a Bignum, but that approach 1) didn't seem to > work past WORD sized numbers and 2) seems like it would be awfully slow. > > -- > Tom Preston-Werner > > * Libraries: > Chronic (chronic.rubyforge.org) > God (god.rubyforge.org) > Fuzed (fuzed.rubyforge.org) > * Site: > rubyisawesome.com dumb question probably, but could you use scientific notation style numbers; i.e., 1.076 * 10^10? You'd return a base as a float and an exponent as a fixnum, and then you could calculate it on the fly...