斎藤と申します。

> いやぁ、こういう風にしっかり見て下さる人がいると
> ほんとうに助かります。斎藤さん感謝です。

とんでもないです。こういう提案の時期が遅れてしまい、
申しわけないです。

>(snip)
> 後日、当てます。

ありがとうございます。よろしくお願いします。


BigDecimal#signの件はとりあえず置いておいて、
とり急ぎバグの修正を。

・NTと_MSC_VERがdefineされている環境でのisinf()の定義を修正

でも正直、どんな環境でこの部分が意味を持つのか正直
分かってません…ごめんなさい。手元のWindowsXP+VS.NET2002で
win32/configure.batを使ってnmakeすると、この部分は
無視されているようでした。

・lib/bigdecimal-rational.rb中のto_rでの、NoMethodErrorを修正

修正後でも、BigDecimal本体より早くrequireするとNameErrorになったり

% ruby -rbigdecimal-rational -rbigdecimal -rrational  -e 'print "ok\n"'
/usr/local/lib/ruby/1.8/i686-linux/bigdecimal.so: BigDecimal is
 already defined (NameError)

Rationalより早くrequireすると警告が出たり

% ruby  -rbigdecimal -rbigdecimal-rational -rrational  -e 'print "ok\n"'
/usr/local/lib/ruby/1.8/rational.rb:47: warning: already initialized
 constant Rational
ok

するものの、それ以外はうまく行っているように思えます。

あとついでに、VPrint()の定義を#ifdef _DEBUGで囲っておきました。

ということで以下のパッチも、よろしくお願いします。

Index: bigdecimal.c
===================================================================
RCS file: /src/ruby/ext/bigdecimal/bigdecimal.c,v
retrieving revision 1.6
diff -u -r1.6 bigdecimal.c
--- bigdecimal.c 6 May 2003 13:18:26 -0000 1.6
+++ bigdecimal.c 22 Jun 2003 16:22:51 -0000
@@ -39,7 +39,7 @@
 #ifdef _MSC_VER
 #include <float.h>
 #define isnan(x) _isnan(x)
-#define isinf(x) (!(_finite(x)))
+#define isinf(x) (!(_finite(x))&&!(_isnan(x)))
 #endif /* _MSC_VER */
 #endif /* defined NT */
 #include "ruby.h"
@@ -2980,6 +2980,7 @@
     return (int)val;
 }

+#ifdef _DEBUG
 /*
  *    cntl_chr ... ASCIIZ Character, print control characters
  *     Available control codes:
@@ -3082,6 +3083,7 @@
     }
     return (int)nc;
 }
+#endif /* _DEBUG */

 static void
 VpFormatSt(char *psz,S_INT fFmt)
Index: lib/bigdecimal-rational.rb
===================================================================
RCS file: /src/ruby/ext/bigdecimal/lib/bigdecimal-rational.rb,v
retrieving revision 1.1
diff -u -r1.1 bigdecimal-rational.rb
--- lib/bigdecimal-rational.rb 28 Mar 2003 05:00:21 -0000 1.1
+++ lib/bigdecimal-rational.rb 22 Jun 2003 16:22:51 -0000
@@ -12,7 +12,7 @@
        else
           denominator = base ** denomi_power
        end
-       Rational.new(numerator,denominator)
+       Rational(numerator,denominator)
     end
 end

--
斎藤ただし