diff --git a/ChangeLog b/ChangeLog index bf097e1c2a..68262ca52e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed May 12 15:04:57 2010 Nobuyoshi Nakada + + * ext/bigdecimal/lib/bigdecimal/math.rb (BigMath#log): improved + precision and performance. [ruby-dev:41295] + Tue May 11 14:26:00 2010 Kenta Murata * ext/bigdecimal/lib/bigdecimal/math.rb (atan), diff --git a/ext/bigdecimal/lib/bigdecimal/math.rb b/ext/bigdecimal/lib/bigdecimal/math.rb index 07efcbe099..41fc69f66c 100644 --- a/ext/bigdecimal/lib/bigdecimal/math.rb +++ b/ext/bigdecimal/lib/bigdecimal/math.rb @@ -190,8 +190,10 @@ module BigMath one = BigDecimal("1") two = BigDecimal("2") n = prec + BigDecimal.double_fig - if (expo = x.exponent) < 0 + if (expo = x.exponent) < 0 || expo >= 3 x = x.mult(BigDecimal("1E#{-expo}"), n) + else + expo = nil end x = (x - one).div(x + one,n) x2 = x.mult(x,n) @@ -206,7 +208,7 @@ module BigMath y += d end y *= two - if expo < 0 + if expo y += log(BigDecimal("10"),prec) * BigDecimal(expo.to_s) end y diff --git a/version.h b/version.h index be78dc9541..35e4b343ca 100644 --- a/version.h +++ b/version.h @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.2" -#define RUBY_RELEASE_DATE "2010-05-11" +#define RUBY_RELEASE_DATE "2010-05-12" #define RUBY_PATCHLEVEL -1 #define RUBY_VERSION_MAJOR 1 @@ -7,7 +7,7 @@ #define RUBY_VERSION_TEENY 1 #define RUBY_RELEASE_YEAR 2010 #define RUBY_RELEASE_MONTH 5 -#define RUBY_RELEASE_DAY 11 +#define RUBY_RELEASE_DAY 12 #include "ruby/version.h"