[#20490] [BUG] evalがらみでSIGSEGV — "yamamoto madoka" <dan@...2.so-net.ne.jp>
こんにちは、山本 円と申します。
[#20495] 不正なバイト列とのマッチ — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#20499] Re: [ruby-cvs] ruby/ext/curses: * string.c (rb_str_shared_replace): clear flags before copy. — nobu.nakada@...
なかだです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
わたなべです。
[#20525] [BigDecimal] changing rule of coerce — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
小林です。
まつもと ゆきひろです
小林です。
小林です。
前田です。
小林です。
小林です。
小林です。
小林です。
小林です。
[#20570] Marshal upgrade — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
咳といいます。
まつもと ゆきひろです
まつもと ゆきひろです
新井です。
新井です。
まつもと ゆきひろです
咳といいます。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#20580] add library(Re:ruby-dev:20570) — たむらけんいち <sgs02516@...>
たむらです。
なひです。
In message <038d01c349cb$eaad71d0$93222fc0@sarion.co.jp>,
まつもと ゆきひろです
In message <1058171960.400840.10041.nullmailer@picachu.netlab.jp>,
話をそらしてしまうかもしれませんが、
In message <20030714.183104.09092354.taca@back-street.net>,
In message <20030715.013655.424936247.gotoyuzo@kotetsu.does.notwork.org>
In message <20030715.025907.26217115.taca@back-street.net>,
In message <20030715.051853.968499478.gotoyuzo@kotetsu.does.notwork.org>
In message <20030721.163444.09092937.taca@back-street.net>,
In message <20030721.191306.60866533.gotoyuzo@kotetsu.does.notwork.org>
In message <20030721.211845.20473808.taca@back-street.net>,
In message <20030722.002037.774147317.gotoyuzo@kotetsu.does.notwork.org>
In message <20030722.003236.72433302.taca@back-street.net>,
[#20582] rexmlのuconv依存 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
In article <1057770842.878440.16422.nullmailer@picachu.netlab.jp>,
なかだです。
In article <200307100751.h6A7pLFs003667@sharui.nakada.kanuma.tochigi.jp>,
[#20606] ruby-1.8.0 on BSD/OS — OHARA Shigeki <os@...>
大原です。
[#20613] compiling Ruby on AIX (powerpc-ibm-aix4.3.3.0) and Alpha OSF/1 (alphaev67-dec-osf5.1) — NISHIMATSU Takeshi <t-nissie@...>
西松と申します.
なかだです。
西松です. お返事が遅くなり申し訳ありません.
[#20631] SOAP4R in 1.8.0? — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20655] frozen ThreadGroup — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
In article <1058719939.886480.22830.nullmailer@picachu.netlab.jp>,
[#20680] 1.8.0 on IA64 etc. — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20691] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#20716] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#20748] [BigDecimal] exception handling — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
[#20765] Re: [ruby-cvs] ruby/lib: * lib/tmpdir.rb: new library to get temporary directory path, — WATANABE Hirofumi <eban@...>
わたなべです。
まつもと ゆきひろです
わたなべです。
まつもと ゆきひろです
わたなべです。
[#20780] complex.rb — Masahiro TANAKA <masa@...>
complex.rb についての修正案を[ruby-math:00543]で提案しましたが、その後
まつもと ゆきひろです
けいじゅ@いしつかです.
At Tue, 22 Jul 2003 17:30:31 +0900, Yukihiro Matsumoto wrote:
まつもと ゆきひろです
けいじゅ@いしつかです.
At Sat, 26 Jul 2003 06:52:21 +0900, 石塚圭樹 wrote:
[#20791] 1.8.0 preview4 schedule — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
永井@知能.九工大です.
[#20795] warning: terminated thread — Masatoshi SEKI <m_seki@...>
咳といいます。
mput です。こんばんわ。
まつもと ゆきひろです
[#20800] 0**(-1) with rational — Tanaka Akira <akr@...17n.org>
そういえば思い出したのですが、rational を require しているときとしてい
At Wed, 23 Jul 2003 03:30:41 +0900, Tanaka Akira wrote:
[#20810] Rational 始めました。 — Shin-ichiro HARA <sinara@...>
原です。
けいじゅ@いしつかです.
In article <200307241940.EAA14225.keiju@ishitsuka.com>,
けいじゅ@いしつかです.
In article <200307271500.AAA04363.keiju@bc.mbn.or.jp>,
[#20818] ThreadGroup#wait — nobu.nakada@...
なかだです。
まつもと ゆきひろです
[#20868] ruby 1.8.0 preview4 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#20887] ext/openssl undefined BN_pseudo_rand_range — Kazuhiro Yoshida <moriq@...>
もりきゅうです。
[#20915] [BUG] errno == 0 — Kazuhiro Yoshida <moriq@...>
もりきゅうです。win32だけかもしれません。
まつもと ゆきひろです
もりきゅうです。
[#20932] move ChangeLog — Tanaka Akira <akr@...17n.org>
提案なんですが、1.8.0 が出たらそこまでのぶんの ChangeLog を移動しませ
[#20949] multiple Tk interpreter support — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#20954] ruby 1.8.0 preview5 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
もりきゅうです。
Siena. です。
[#20957] [BigDecimal] conflict between Numeric#div and BigDecimal#div — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>
斎藤です。
At Mon, 28 Jul 2003 18:26:20 +0900, Tadashi Saito wrote:
まつもと ゆきひろです
At Mon, 28 Jul 2003 21:16:08 +0900, Yukihiro Matsumoto wrote:
まつもと ゆきひろです
At Tue, 29 Jul 2003 14:43:19 +0900, Yukihiro Matsumoto wrote:
原です。
[#20989] Re: [Oniguruma] explicit capture — kkosako@...
> -----Original Message-----
[#21027] -W option — WATANABE Hirofumi <eban@...>
わたなべです。
[ruby-dev:20801] [BigDecimal] Java compatible rounding
斎藤です。 BigDecimalには、数の丸めの機能が実装されていますが、どうせなら JavaのBigDecimal互換の方がいいのではないでしょうか。 現状の「COMP_MODE」という名前ではちょっと抽象的な気もしますし、 ROUNDUPは「四捨五入」ではなく「切り上げ」という意味だと思います。 以下のパッチでは、RubyのBigDecimalにJava相当の機能を与えるため、とりあえず ・COMP_MODE* → ROUND* ・従来のROUNDUP → ROUND_HALF_UP(英語としてこちらが正しい) ・JavaのBigDecimalにあった丸めモード、 ROUND_UP(単なる切り上げ)、ROUND_HALF_DOWN の追加 ・...CEIL → ROUND_CEILING(ceilingのみ略称なのはおかしいと思ったので) という事をやっています。また、ROUND_DOWNの別名としてROUND_TRUNCATEも 定義してみました。 とりあえず、.c と .h のみのパッチを、ちょっと大きいので添付ファイルと してみました。取り込みを検討していただけますか? >小林さん -- 斎藤ただし
Attachments (1)
Index: bigdecimal.c
===================================================================
RCS file: /src/ruby/ext/bigdecimal/bigdecimal.c,v
retrieving revision 1.11
diff -u -p -r1.11 bigdecimal.c
--- bigdecimal.c 21 Jul 2003 14:49:25 -0000 1.11
+++ bigdecimal.c 22 Jul 2003 16:52:38 -0000
@@ -288,7 +288,7 @@ BigDecimal_mode(VALUE self, VALUE which,
}
return INT2FIX(fo);
}
- if(VP_COMP_MODE==f) {
+ if(VP_ROUND==f) {
/* Computaion mode setting */
if(TYPE(val)!=T_FIXNUM) return Qnil;
fo = VpSetCompMode((unsigned long)FIX2INT(val));
@@ -729,7 +729,7 @@ BigDecimal_DoDivmod(VALUE self, VALUE r,
VpDivd(c, res, a, b);
mx = c->Prec *(VpBaseFig() + 1);
GUARD_OBJ(d,VpCreateRbObject(mx, "0"));
- VpActiveRound(d,c,VP_COMP_MODE_FLOOR,0);
+ VpActiveRound(d,c,VP_ROUND_FLOOR,0);
VpMult(res,d,b);
VpAddSub(c,a,res,-1);
*div = d;
@@ -776,7 +776,7 @@ BigDecimal_divremain(VALUE self, VALUE r
GUARD_OBJ(d,VpCreateRbObject(mx, "0"));
GUARD_OBJ(f,VpCreateRbObject(mx, "0"));
- VpActiveRound(d,c,VP_COMP_MODE_TRUNCATE,0); /* 0: round off */
+ VpActiveRound(d,c,VP_ROUND_DOWN,0); /* 0: round down */
VpFrac(f, c);
VpMult(rr,f,b);
@@ -923,7 +923,7 @@ BigDecimal_fix(VALUE self)
GUARD_OBJ(a,GetVpValue(self,1));
mx = a->Prec *(VpBaseFig() + 1);
GUARD_OBJ(c,VpCreateRbObject(mx, "0"));
- VpActiveRound(c,a,VP_COMP_MODE_TRUNCATE,0); /* 0: round off */
+ VpActiveRound(c,a,VP_ROUND_DOWN,0); /* 0: round down */
return ToValue(c);
}
@@ -938,7 +938,7 @@ BigDecimal_round(int argc, VALUE *argv,
VALUE vLoc;
VALUE vBanker;
int na = rb_scan_args(argc,argv,"02",&vLoc,&vBanker);
- sw = VP_COMP_MODE_ROUNDUP; /* round up */
+ sw = VP_ROUND_HALF_UP; /* round half up */
switch(na) {
case 0:
iLoc = 0;
@@ -951,7 +951,7 @@ BigDecimal_round(int argc, VALUE *argv,
Check_Type(vLoc, T_FIXNUM);
iLoc = FIX2INT(vLoc);
Check_Type(vBanker, T_FIXNUM);
- if(FIX2INT(vBanker)) sw = VP_COMP_MODE_EVEN; /* Banker's rounding */
+ if(FIX2INT(vBanker)) sw = VP_ROUND_HALF_EVEN; /* Banker's rounding */
break;
}
@@ -981,7 +981,7 @@ BigDecimal_truncate(int argc, VALUE *arg
GUARD_OBJ(a,GetVpValue(self,1));
mx = a->Prec *(VpBaseFig() + 1);
GUARD_OBJ(c,VpCreateRbObject(mx, "0"));
- VpActiveRound(c,a,VP_COMP_MODE_TRUNCATE,iLoc); /* 0: truncate */
+ VpActiveRound(c,a,VP_ROUND_DOWN,iLoc); /* 0: truncate */
return ToValue(c);
}
@@ -1018,7 +1018,7 @@ BigDecimal_floor(int argc, VALUE *argv,
GUARD_OBJ(a,GetVpValue(self,1));
mx = a->Prec *(VpBaseFig() + 1);
GUARD_OBJ(c,VpCreateRbObject(mx, "0"));
- VpActiveRound(c,a,VP_COMP_MODE_FLOOR,iLoc);
+ VpActiveRound(c,a,VP_ROUND_FLOOR,iLoc);
return ToValue(c);
}
@@ -1041,7 +1041,7 @@ BigDecimal_ceil(int argc, VALUE *argv, V
GUARD_OBJ(a,GetVpValue(self,1));
mx = a->Prec *(VpBaseFig() + 1);
GUARD_OBJ(c,VpCreateRbObject(mx, "0"));
- VpActiveRound(c,a,VP_COMP_MODE_CEIL,iLoc);
+ VpActiveRound(c,a,VP_ROUND_CEILING,iLoc);
return ToValue(c);
}
@@ -1400,12 +1400,15 @@ Init_bigdecimal(void)
rb_define_const(rb_cBigDecimal, "EXCEPTION_ZERODIVIDE",INT2FIX(VP_EXCEPTION_ZERODIVIDE));
/* Computation mode */
- rb_define_const(rb_cBigDecimal, "COMP_MODE",INT2FIX(VP_COMP_MODE));
- rb_define_const(rb_cBigDecimal, "COMP_MODE_TRUNCATE",INT2FIX(VP_COMP_MODE_TRUNCATE));
- rb_define_const(rb_cBigDecimal, "COMP_MODE_ROUNDUP",INT2FIX(VP_COMP_MODE_ROUNDUP));
- rb_define_const(rb_cBigDecimal, "COMP_MODE_CEIL",INT2FIX(VP_COMP_MODE_CEIL));
- rb_define_const(rb_cBigDecimal, "COMP_MODE_FLOOR",INT2FIX(VP_COMP_MODE_FLOOR));
- rb_define_const(rb_cBigDecimal, "COMP_MODE_EVEN",INT2FIX(VP_COMP_MODE_EVEN));
+ rb_define_const(rb_cBigDecimal, "ROUND",INT2FIX(VP_ROUND));
+ rb_define_const(rb_cBigDecimal, "ROUND_TRUNCATE",INT2FIX(VP_ROUND_DOWN));
+ rb_define_const(rb_cBigDecimal, "ROUND_DOWN",INT2FIX(VP_ROUND_DOWN));
+ rb_define_const(rb_cBigDecimal, "ROUND_UP",INT2FIX(VP_ROUND_UP));
+ rb_define_const(rb_cBigDecimal, "ROUND_CEILING",INT2FIX(VP_ROUND_CEILING));
+ rb_define_const(rb_cBigDecimal, "ROUND_FLOOR",INT2FIX(VP_ROUND_FLOOR));
+ rb_define_const(rb_cBigDecimal, "ROUND_HALF_EVEN",INT2FIX(VP_ROUND_HALF_EVEN));
+ rb_define_const(rb_cBigDecimal, "ROUND_HALF_DOWN",INT2FIX(VP_ROUND_HALF_DOWN));
+ rb_define_const(rb_cBigDecimal, "ROUND_HALF_UP",INT2FIX(VP_ROUND_HALF_UP));
/* Constants for sign value */
rb_define_const(rb_cBigDecimal, "SIGN_NaN",INT2FIX(VP_SIGN_NaN));
@@ -1499,7 +1502,7 @@ static int gfCheckVal = 1; /* Value
#endif /* _DEBUG */
static U_LONG gnPrecLimit = 0; /* Global upper limit of the precision newly allocated */
-static short gfCompMode = VP_COMP_MODE_ROUNDUP; /* Mode for general computation */
+static short gfCompMode = VP_ROUND_HALF_UP; /* Mode for general computation */
static U_LONG BASE_FIG = 4; /* =log10(BASE) */
static U_LONG BASE = 10000L; /* Base value(value must be 10**BASE_FIG) */
@@ -1593,8 +1596,9 @@ VP_EXPORT unsigned long
VpSetCompMode(unsigned long n)
{
unsigned long s = gfCompMode;
- if(n!=VP_COMP_MODE_TRUNCATE && n!= VP_COMP_MODE_ROUNDUP && n!=VP_COMP_MODE_CEIL &&
- n!=VP_COMP_MODE_FLOOR && n!= VP_COMP_MODE_EVEN) return s;
+ if(n!=VP_ROUND_DOWN && n!=VP_ROUND_UP && n!=VP_ROUND_CEILING &&
+ n!=VP_ROUND_FLOOR && n!=VP_ROUND_HALF_EVEN && n!=VP_ROUND_HALF_DOWN &&
+ n!=VP_ROUND_HALF_UP) return s;
gfCompMode = n;
return s;
}
@@ -3759,18 +3763,21 @@ VpActiveRound(Real *y, Real *x, int f, i
div = v/10;
v = v - div*10;
switch(f) {
- case VP_COMP_MODE_TRUNCATE: /* Truncate/Round off */
- break;
- case VP_COMP_MODE_ROUNDUP: /* Round up */
+ case VP_ROUND_DOWN: /* Truncate/Round down */
+ break;
+ case VP_ROUND_UP:
+ ++div;
+ break;
+ case VP_ROUND_HALF_UP: /* Round half up */
if(v>=5) ++div;
break;
- case VP_COMP_MODE_CEIL: /* ceil */
+ case VP_ROUND_CEILING: /* ceil */
if(v && (VpGetSign(x)>0)) ++div;
break;
- case VP_COMP_MODE_FLOOR: /* floor */
+ case VP_ROUND_FLOOR: /* floor */
if(v && (VpGetSign(x)<0)) ++div;
break;
- case VP_COMP_MODE_EVEN: /* Banker's rounding */
+ case VP_ROUND_HALF_EVEN: /* Banker's rounding */
if(v>5) ++div;
else if(v==5) {
if(i==(BASE_FIG-1)) {
@@ -3780,6 +3787,9 @@ VpActiveRound(Real *y, Real *x, int f, i
}
}
break;
+ case VP_ROUND_HALF_DOWN:
+ if(v>5) ++div;
+ break;
}
for(i=0;i<=n;++i) div *= 10;
if(div>=BASE) {
@@ -3812,21 +3822,27 @@ VpInternalRound(Real *c,int ixDigit,U_LO
int f = 0;
v /= BASE1;
switch(gfCompMode) {
- case VP_COMP_MODE_TRUNCATE:
+ case VP_ROUND_DOWN:
break;
- case VP_COMP_MODE_ROUNDUP:
+ case VP_ROUND_UP:
+ f = 1;
+ break;
+ case VP_ROUND_HALF_UP:
if(v >= 5) f = 1;
break;
- case VP_COMP_MODE_CEIL: /* ceil */
+ case VP_ROUND_CEILING: /* ceil */
if(v && (VpGetSign(c)>0)) f = 1;
break;
- case VP_COMP_MODE_FLOOR: /* floor */
+ case VP_ROUND_FLOOR: /* floor */
if(v && (VpGetSign(c)<0)) f = 1;
break;
- case VP_COMP_MODE_EVEN: /* Banker's rounding */
+ case VP_ROUND_HALF_EVEN: /* Banker's rounding */
if(v>5) f = 1;
else if(v==5 && vPrev%2) f = 1;
break;
+ case VP_ROUND_HALF_DOWN:
+ if(v>5) f = 1;
+ break;
}
if(f) VpRdup(c,ixDigit); /* round up */
return f;
Index: bigdecimal.h
===================================================================
RCS file: /src/ruby/ext/bigdecimal/bigdecimal.h,v
retrieving revision 1.5
diff -u -p -r1.5 bigdecimal.h
--- bigdecimal.h 18 Jul 2003 15:23:23 -0000 1.5
+++ bigdecimal.h 22 Jul 2003 16:52:38 -0000
@@ -44,12 +44,14 @@ extern "C" {
#define VP_EXCEPTION_MEMORY ((unsigned short)0x0040)
/* Computation mode */
-#define VP_COMP_MODE ((unsigned short)0x0100)
-#define VP_COMP_MODE_TRUNCATE 0
-#define VP_COMP_MODE_ROUNDUP 1
-#define VP_COMP_MODE_CEIL 2
-#define VP_COMP_MODE_FLOOR 3
-#define VP_COMP_MODE_EVEN 4
+#define VP_ROUND ((unsigned short)0x0100)
+#define VP_ROUND_DOWN 0
+#define VP_ROUND_UP 1
+#define VP_ROUND_CEILING 2
+#define VP_ROUND_FLOOR 3
+#define VP_ROUND_HALF_EVEN 4
+#define VP_ROUND_HALF_DOWN 5
+#define VP_ROUND_HALF_UP 6
#define VP_SIGN_NaN 0 /* NaN */
#define VP_SIGN_POSITIVE_ZERO 1 /* Positive zero */