Forums
New posts
Search forums
Members
Current visitors
Log in
Register
What's new
Search
Search
Search titles only
By:
New posts
Search forums
Menu
Log in
Register
Install the app
Install
Forums
Archive
Archive
Ruby
[Ruby Problem Report] Strange behaviour of class Fixnum in exponentation
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Reply to thread
Message
[QUOTE="Wolfgang Nádasi-Donner, post: 4470767"] The german Ruby forum recognized a strange behaviour of the Fixnum class. In exponentation Fixnum is much slower than Bignum, which lets us assume, that some kind of a problem occurs in the implementation. Example: require 'benchmark' N = 10**6 B = 65891264863465298234965902602612457060348499377 F = 4628 Benchmark.bmbm(10) do |bm| bm.report('Bignum') do N.times do B ** 0.5 end end bm.report('Fixnum') do N.times do F ** 0.5 end end end user system total real Bignum 3.856000 0.000000 3.856000 ( 3.946000) Fixnum 7.861000 0.020000 7.881000 ( 8.081000) Further investigations leads to the responsible C code: static VALUE fix_pow(x, y) VALUE x, y; { if (FIXNUM_P(y)) { long a, b; b = FIX2LONG(y); if (b == 0) return INT2FIX(1); if (b == 1) return x; a = FIX2LONG(x); if (b > 0) { return rb_big_pow(rb_int2big(a), y); } return rb_float_new(pow((double)a, (double)b)); } return rb_num_coerce_bin(x, y); // <-- das dauert } /* vs. */ VALUE rb_big_pow(x, y) VALUE x, y; { double d; long yy; if (y == INT2FIX(0)) return INT2FIX(1); switch (TYPE(y)) { case T_FLOAT: // <-- das geht schnell d = RFLOAT(y)->value; break; case T_BIGNUM: ... case T_FIXNUM: ... default: return rb_num_coerce_bin(x, y); } return rb_float_new(pow(rb_big2dbl(x), d)); } Is it possible to put this Mail to right place for "Ruby Problem Reports". I didn't find out the right place. Best regards, Wolfgang Nádasi-Donner [/QUOTE]
Verification
Post reply
Forums
Archive
Archive
Ruby
[Ruby Problem Report] Strange behaviour of class Fixnum in exponentation
Top