From: Shigeo Kobayashi Date: 2000-01-25T12:49:21+09:00 Subject: [ruby-list:20376] Re: divmod() 小林@仕事中断モードです。 ----- Original Message ----- 送信者 : Shigeo Kobayashi 件名 : [ruby-list:20373] Re: divmod() > > 丸める方向を、ゼロ方向にするか、floor()方向にするかの問題ですが > Ruby本には単に「商と剰余」とあるし、a==d*b+rが成立すると考える > のは間違いではないと思うのですが? > で、nemeric.c を以下のような感じにすることを提案したいのですが? # 後はruby-math ? static VALUE num_divmod(x, y) VALUE x, y; { VALUE div, mod; static ID remainder=0; if(!remainder) remainder = rb_intern("remainder"); div = rb_funcall(x, '/', 1, y); if (TYPE(div) == T_FLOAT) { double d = floor(RFLOAT(div)->value); if(d<0.0 && RFLOAT(div)->value > d) { div = rb_float_new(d+1.0); } else if (RFLOAT(div)->value > d) { div = rb_float_new(d); } } mod = rb_funcall(x, remainder, 1, y); return rb_assoc_new(div, mod); } 小林 茂雄 E-Mail: shigeo@tinyforest.gr.jp WWW: http://www.tinyforest.gr.jp