Forum: Ruby-dev [ruby-trunk - Feature #5512][Open] Integer#/ の改訂

Posted by tadayoshi funaba (Guest)
on 2011-10-30 09:20
(Received via mailing list)
Issue #5512 has been reported by tadayoshi funaba.

----------------------------------------
Feature #5512: Integer#/ の改訂
http://redmine.ruby-lang.org/issues/5512

Author: tadayoshi funaba
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0


Integer#/ を Integer#quo の別名として定義しなおす事を提案します。

現在の Integer#/ はオペランドが整数である場合値が整数になります。整数を
与えた場合の結果だけを見て、あるいは整数ではない場合の結果だけを見て自
分の望み通りの結果を得たと思い込んでしまうかもしれません。

これついての対処として、Integer#div、または Integer#quo を利用するよう
啓蒙するなどいくつかの提案がありうるでしょうが、本質的な解決法は、やは
り仕様を変更するしかないと思われます。

これはプログラミングにおける総称性の確保の邪魔になり、Numeric#/ を利用
はバグの温床になり得えます。
Posted by Yukihiro Matsumoto (Guest)
on 2011-10-31 19:46
(Received via mailing list)
$B$^$D$b$H(B $B$f$-$R$m$G$9(B

In message "Re: [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] 
Integer#/ $B$N2~D{(B"
    on Sun, 30 Oct 2011 17:19:45 +0900, tadayoshi funaba 
<redmine@ruby-lang.org> writes:

|Integer#/ $B$r(B Integer#quo $B$NJLL>$H$7$FDj5A$7$J$*$9;v$rDs0F$7$^$9!#(B

$BD94|E*$K$O;?@.$7$^$9$,!"(B2.0$B$K$O$"$^$j2a5n$H$NHs8_49@-$rF~$l(B
$B$?$/$J$$$N$G!"$=$N<!(B(3.0?)$B$K$7$h$&$H;W$$$^$9!#(B
Posted by Kenta Murata (Guest)
on 2011-11-01 01:52
(Received via mailing list)
(2011.11.01 03:45 ), Yukihiro Matsumoto wrote:
> $B$^$D$b$H(B $B$f$-$R$m$G$9(B
>
> In message "Re: [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ 
$B$N2~D{(B"
>     on Sun, 30 Oct 2011 17:19:45 +0900, tadayoshi funaba <redmine@ruby-lang.org> 
writes:
>
> |Integer#/ $B$r(B Integer#quo $B$NJLL>$H$7$FDj5A$7$J$*$9;v$rDs0F$7$^$9!#(B
>
> $BD94|E*$K$O;?@.$7$^$9$,!"(B2.0$B$K$O$"$^$j2a5n$H$NHs8_49@-$rF~$l(B
> $B$?$/$J$$$N$G!"$=$N<!(B(3.0?)$B$K$7$h$&$H;W$$$^$9!#(B

2.0 $B$,%j%j!<%9$5$l$?$i(B trunk $B$G<BAu$G$-$k$H2r<a$7$FNI$$$G$9$+!)(B
$B$=$l$H$b!"(B2.0 $B$N%j%j!<%98e$K$b$&0lEY9M$($^$9$+!)(B
Posted by Yusuke Endoh (Guest)
on 2011-11-01 14:13
(Received via mailing list)
$B1sF#$G$9!#(B

2011$BG/(B11$B7n(B1$BF|(B3:45 Yukihiro Matsumoto <matz@ruby-lang.org>:
> In message "Re: [ruby-dev:44707] [ruby-trunk - Feature #5512][Open] Integer#/ 
$B$N2~D{(B"
>    on Sun, 30 Oct 2011 17:19:45 +0900, tadayoshi funaba <redmine@ruby-lang.org> 
writes:
>
> |Integer#/ $B$r(B Integer#quo $B$NJLL>$H$7$FDj5A$7$J$*$9;v$rDs0F$7$^$9!#(B
>
> $BD94|E*$K$O;?@.$7$^$9$,!"(B2.0$B$K$O$"$^$j2a5n$H$NHs8_49@-$rF~$l(B
> $B$?$/$J$$$N$G!"$=$N<!(B(3.0?)$B$K$7$h$&$H;W$$$^$9!#(B


$BK\5$$GJQ$($kM=Dj$,$"$k$N$J$i!"FCBg$NHs8_49$K$J$j$^$9$N$G!":#$N$&$A$K(B
$B@Z$j<N$F$?$$>l9g$N?d>)BeBX:v$r7h$a$F(B ( (x/y).round $B$G$9$+$M!)(B) 
$B!"(B
2.0 
$B$+$i7<LX$7$F$*$$$?$[$&$,$$$$$H;W$$$^$9!#(B($B$D$^$j?d>)7A<0$K$J$C$F(B
$B$$$J$$>l9g$K(B warning $B$r=P$9(B)


$B8D?ME*$K$O!"(BInteger#// $B$H$+JL$N1i;;;R$rF3F~$7$F!"(BInteger#/ 
$B$OJQ$($J$$(B
$BJ}$,4r$7$$$G$9!#@Z$j<N$F$r4|BT$7$?%3!<%I$r$9$4$/=q$$$F$-$?!#!#!#(B
Posted by Tadayoshi Funaba (Guest)
on 2011-11-01 14:47
(Received via mailing list)
> $BK\5$$GJQ$($kM=Dj$,$"$k$N$J$i!"FCBg$NHs8_49$K$J$j$^$9$N$G!":#$N$&$A$K(B
> $B@Z$j<N$F$?$$>l9g$N?d>)BeBX:v$r7h$a$F(B ( (x/y).round $B$G$9$+$M!)(B) $B!"(B
> 2.0 $B$+$i7<LX$7$F$*$$$?$[$&$,$$$$$H;W$$$^$9!#(B($B$D$^$j?d>)7A<0$K$J$C$F(B
> $B$$$J$$>l9g$K(B warning $B$r=P$9(B)

$B$=$l$O;?@.$G$9!#$3$l$^$G$N;v$r9M$($k$H$"$^$j4|BT$G$-$J$$$G$9$,!#(B
python2 $B$G$d$C$?$h$&$J;v$G$9$,!"(Bruby $B$@$H(B div 
$B$r$D$+$($C$F$/$i$$$G$7$g(B
$B$&!#(B

> $B8D?ME*$K$O!"(BInteger#// $B$H$+JL$N1i;;;R$rF3F~$7$F!"(BInteger#/ 
$B$OJQ$($J$$(B
> $BJ}$,4r$7$$$G$9!#@Z$j<N$F$r4|BT$7$?%3!<%I$r$9$4$/=q$$$F$-$?!#!#!#(B

smalltalk $B$G$O!"(B// $B$,@Z<N$F(B \\ 
$B$,$=$l$NBP$K$J$kM>$j$J$C$F$$$^$9$,!"(B
ruby $B$G$O(B // 
$B$O@55,I=8=$KHo$k$N$G%@%a$@$H8@$o$l$^$7$?!#$I$C$A$K$7$F$b(B
Integer#/ $B$rJQ$($k;v$K0UL#$,$"$k$N$G!"$=$l$@$C$?$i!"(Bdiv $B$H(B quo 
$B$r$D$+$$(B
$B$^$7$g$&$G=*$j$G$9$M!#8e$O$D$+$$$d$9$$$h$&$K(B div 
$B%a%=%C%I$G$O$J$/!"(Bdiv
$B1i;;;R$rMQ0U$9$k$/$i$$$+!#(B
Posted by Yukihiro Matsumoto (Guest)
on 2011-11-01 15:00
(Received via mailing list)
$B$^$D$b$H(B $B$f$-$R$m$G$9(B

In message "Re: [ruby-dev:44765] Re: [ruby-trunk - Feature #5512][Open] 
Integer#/   $B$N2~D{(B"
    on Tue, 1 Nov 2011 22:12:54 +0900, Yusuke Endoh <mame@tsg.ne.jp> 
writes:

|$BK\5$$GJQ$($kM=Dj$,$"$k$N$J$i!"FCBg$NHs8_49$K$J$j$^$9$N$G!":#$N$&$A$K(B
|$B@Z$j<N$F$?$$>l9g$N?d>)BeBX:v$r7h$a$F(B ( (x/y).round $B$G$9$+$M!)(B) $B!"(B
|2.0 $B$+$i7<LX$7$F$*$$$?$[$&$,$$$$$H;W$$$^$9!#(B($B$D$^$j?d>)7A<0$K$J$C$F(B
|$B$$$J$$>l9g$K(B warning $B$r=P$9(B)

$BJ}?K$H$7$F$O;?@.$G$9$,!"!V?d>)7A<0$K$J$C$F$$$J$$!W$3$H$r$I$&(B
$B$d$C$F8!=P$7$^$9$+!)(B Integer#/ $B$,8F$P$l$kEY$K7Y9p$r=P$9!)(B

|$B8D?ME*$K$O!"(BInteger#// $B$H$+JL$N1i;;;R$rF3F~$7$F!"(BInteger#/ $B$OJQ$($J$$(B
|$BJ}$,4r$7$$$G$9!#@Z$j<N$F$r4|BT$7$?%3!<%I$r$9$4$/=q$$$F$-$?!#!#!#(B

$BJL$N1i;;;R$H$$$&0UL#$G$O(B quo $B$,$"$k$N$G!"!VJQ$($J$$!W$H$$$&(B
$B$N$O$3$NDs0F$N0UL#$,$J$/$J$k$N$G$O$J$$$G$7$g$&$+!#$^$?!"@0?t(B
$B$,MW5a$5$l$k$H$3$m$G$O$[$H$s$I$N>l9g@Z$j<N$F$,9T$o$l$F$$$k$O(B
$B$:$J$N$G!"<B:]$K$O$"$^$jLdBj$K$J$i$J$$$3$H$,B?$$$+$b$7$l$^$;(B
$B$s!#$D$^$j!"(B

  p 1/2

$B$_$?$$$N$O1F6A$r<u$1$k$1$I(B

  ary[1/2]

$B$_$?$$$N$O1F6A$r<u$1$J$$$C$F$3$H!#(B

                                $B$^$D$b$H(B $B$f$-$R$m(B /:|)
Posted by Yusuke Endoh (Guest)
on 2011-11-01 15:40
(Received via mailing list)
$B$U$J$P$5$s!"$^$D$b$H$5$s!"(B
$B$*JV;v$"$j$,$H$&$4$6$$$^$9!#(B

2011$BG/(B11$B7n(B1$BF|(B22:46 Tadayoshi Funaba <tadf@dotrb.org>:
>> $BK\5$$GJQ$($kM=Dj$,$"$k$N$J$i!"FCBg$NHs8_49$K$J$j$^$9$N$G!":#$N$&$A$K(B
>> $B@Z$j<N$F$?$$>l9g$N?d>)BeBX:v$r7h$a$F(B ( (x/y).round $B$G$9$+$M!)(B) $B!"(B
>> 2.0 $B$+$i7<LX$7$F$*$$$?$[$&$,$$$$$H;W$$$^$9!#(B($B$D$^$j?d>)7A<0$K$J$C$F(B
>> $B$$$J$$>l9g$K(B warning $B$r=P$9(B)
>
> $B$=$l$O;?@.$G$9!#$3$l$^$G$N;v$r9M$($k$H$"$^$j4|BT$G$-$J$$$G$9$,!#(B
> python2 $B$G$d$C$?$h$&$J;v$G$9$,!"(Bruby $B$@$H(B div 
$B$r$D$+$($C$F$/$i$$$G$7$g(B
> $B$&!#(B

$B$J$k$[$I!#(B
$B!VBe$o$j$K(B Integer#div $B;H$(!W$H$$$&$3$H$J$N$G!"(BInteger#/ $B$,(B
$B8F$P$l$k$?$S!"$b$7$/$O=i$a$F8F$P$l$?;~$@$1$K7Y9p$9$k46$8$G$9$+$M!#(B


>> $B8D?ME*$K$O!"(BInteger#// $B$H$+JL$N1i;;;R$rF3F~$7$F!"(BInteger#/ 
$B$OJQ$($J$$(B
>> $BJ}$,4r$7$$$G$9!#@Z$j<N$F$r4|BT$7$?%3!<%I$r$9$4$/=q$$$F$-$?!#!#!#(B
>
> smalltalk $B$G$O!"(B// $B$,@Z<N$F(B \\ $B$,$=$l$NBP$K$J$kM>$j$J$C$F$$$^$9$,!"(B
> ruby $B$G$O(B // $B$O@55,I=8=$KHo$k$N$G%@%a$@$H8@$o$l$^$7$?!#$I$C$A$K$7$F$b(B
> Integer#/ $B$rJQ$($k;v$K0UL#$,$"$k$N$G!"$=$l$@$C$?$i!"(Bdiv $B$H(B quo 
$B$r$D$+$$(B
> $B$^$7$g$&$G=*$j$G$9$M!#8e$O$D$+$$$d$9$$$h$&$K(B div $B%a%=%C%I$G$O$J$/!"(Bdiv
> $B1i;;;R$rMQ0U$9$k$/$i$$$+!#(B

$B8+$d$9$$CfCV1i;;;R$,$J$$$3$H$,ITK~$J$N$+$J$H;W$C$?$N$G$9$,!"(B
$BJQ$($k$3$H<+BN$,L\E*$J$s$G$9$+$M!#(B



2011$BG/(B11$B7n(B1$BF|(B23:00 Yukihiro Matsumoto <matz@ruby-lang.org>:
> $B$^$?!"@0?t(B
> $B$,MW5a$5$l$k$H$3$m$G$O$[$H$s$I$N>l9g@Z$j<N$F$,9T$o$l$F$$$k$O(B
> $B$:$J$N$G!"<B:]$K$O$"$^$jLdBj$K$J$i$J$$$3$H$,B?$$$+$b$7$l$^$;(B
> $B$s!#(B

x $B$r(B n $B$NG\?t$K%"%i%$%s$5$;$k$?$a$K(B

  x / n * n

$B$H$$$&%$%G%#%*%`$r$+$J$j=q$$$F$-$F$k$s$G$9$h$M!#(B

$B$3$N%$%G%#%*%`$,6qBNE*$K$I$&$$$&$H$-$KI,MW$+$H$$$&$H!"4JC1$K$O(B
$B@bL@$7$K$/$$$s$G$9$,!"$($($H!"%?%$%k$rBP>NE*$KJB$Y$k$?$a8D?t$r(B
$B6v?t$K8BDj$9$k(B (x / 2 * 2) $B$H$+!"(B10^14 .. 10^14 + 1000000 $B$N(B
$BHO0O$NAG?t$rNs5s$9$k(B (2 $BCJ3,%(%i%H%9%F%M%9(B) $B$H$+!#(B
$BL/$JNc$G$9$_$^$;$s!#(B


$B$"$H!"8=>u$N(B quo $B$@$H!"(B4.quo(2) $B$,(B Rational 
$B$K$J$k$_$?$$$G$9$,!"(B
$B@0?t$G:Q$`;~$O@0?t$K$J$k$h$&$K$7$^$;$s$+!)(B
Posted by Yukihiro Matsumoto (Guest)
on 2011-11-01 15:47
(Received via mailing list)
$B$^$D$b$H(B $B$f$-$R$m$G$9(B

In message "Re: [ruby-dev:44768] Re: [ruby-trunk - Feature #5512][Open] 
Integer#/   $B$N2~D{(B"
    on Tue, 1 Nov 2011 23:40:20 +0900, Yusuke Endoh <mame@tsg.ne.jp> 
writes:

|x $B$r(B n $B$NG\?t$K%"%i%$%s$5$;$k$?$a$K(B
|
|  x / n * n
|
|$B$H$$$&%$%G%#%*%`$r$+$J$j=q$$$F$-$F$k$s$G$9$h$M!#(B

$B$J$k$[$I!#8_49@-LdBj$N2r7h$K$O$J$j$^$;$s$,!"@0?t$r%"%i%$%s$5(B
$B$;$k%a%=%C%I$,M_$7$$$3$H$b$"$k$+$b$7$l$^$;$s$M!#(B
Posted by Kenta Murata (Guest)
on 2011-11-02 01:29
(Received via mailing list)
$B$`$i$?$G$9!#(B

(2011.11.01 23:40 ), Yusuke Endoh wrote:
> $B$"$H!"8=>u$N(B quo $B$@$H!"(B4.quo(2) $B$,(B Rational $B$K$J$k$_$?$$$G$9$,!"(B
> $B@0?t$G:Q$`;~$O@0?t$K$J$k$h$&$K$7$^$;$s$+!)(B
>

$B$I$&$;$J$i!"J,Jl$,(B 1 $B$N(B Rational 
$B$O$9$Y$F@0?t$K@5=`2=$5$;$k$h$&$K(B
$BJQ99$7$^$;$s$+!)(B
Posted by Masaya TARUI (Guest)
on 2011-11-22 13:27
(Received via mailing list)
$B$?$k$$$G$9!#(B

2011$BG/(B11$B7n(B1$BF|(B22:12 Yusuke Endoh <mame@tsg.ne.jp>:
> $BK\5$$GJQ$($kM=Dj$,$"$k$N$J$i!"FCBg$NHs8_49$K$J$j$^$9$N$G!":#$N$&$A$K(B
> $B@Z$j<N$F$?$$>l9g$N?d>)BeBX:v$r7h$a$F(B ( (x/y).round $B$G$9$+$M!)(B) $B!"(B
> 2.0 $B$+$i7<LX$7$F$*$$$?$[$&$,$$$$$H;W$$$^$9!#(B($B$D$^$j?d>)7A<0$K$J$C$F(B
> $B$$$J$$>l9g$K(B warning $B$r=P$9(B)

$B?d>)BeBX0F$C$F(Bx.div(y)$B$G$9$h$M!)(B


> $B8D?ME*$K$O!"(BInteger#// $B$H$+JL$N1i;;;R$rF3F~$7$F!"(BInteger#/ 
$B$OJQ$($J$$(B
> $BJ}$,4r$7$$$G$9!#@Z$j<N$F$r4|BT$7$?%3!<%I$r$9$4$/=q$$$F$-$?!#!#!#(B

$B;d$b(B x / a * b $B$_$?$$$J%3!<%I$O$:$$$V$sBt;3=q$$$F$-$?$N$G!"(B
$BHs8_49$O4r$7$/$J$$$G$9!#(B

$BIaCJ$O1i;;;R$G@0?t$KJD$8$?1i;;$r$7$?$$$N$G$9$,!"(B
Numeric$B$NAm>N@-$N3NJ]$H>e<j$/:.$<$?2r$O$J$$$G$7$g$&$+!)(B
Posted by ko1 (Koichi Sasada) (Guest)
on 2013-02-26 01:51
(Received via mailing list)
Issue #5512 has been updated by ko1 (Koichi Sasada).

Category set to core
Assignee set to matz (Yukihiro Matsumoto)

宙ぶらりんになっているようなので、まつもとさんにアサインしておきます。
ご検討下さい。

----------------------------------------
Feature #5512: Integer#/ の改訂
https://bugs.ruby-lang.org/issues/5512#change-37021

Author: tadf (tadayoshi funaba)
Status: Open
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: Next Major


Integer#/ を Integer#quo の別名として定義しなおす事を提案します。

現在の Integer#/ はオペランドが整数である場合値が整数になります。整数を
与えた場合の結果だけを見て、あるいは整数ではない場合の結果だけを見て自
分の望み通りの結果を得たと思い込んでしまうかもしれません。

これついての対処として、Integer#div、または Integer#quo を利用するよう
啓蒙するなどいくつかの提案がありうるでしょうが、本質的な解決法は、やは
り仕様を変更するしかないと思われます。

これはプログラミングにおける総称性の確保の邪魔になり、Numeric#/ を利用
はバグの温床になり得えます。
Posted by shugo (Shugo Maeda) (Guest)
on 2013-02-26 03:27
(Received via mailing list)
Issue #5512 has been updated by shugo (Shugo Maeda).

Status changed from Open to Assigned

ko1 (Koichi Sasada) wrote:
> 宙ぶらりんになっているようなので、まつもとさんにアサインしておきます。
> ご検討下さい。

そういえば、mrubyでは1 / 2が0.5 (Float)になる(ので規格に準拠していない)ようなのですが、
将来CRubyで仕様変更するための布石でしょうか。

後方互換性については、

  using OldIntegerDivision

としたらInteger#/が現在の挙動に戻るといった対応は考えられるかなと思いますが、その前に
Refinementsを何とかしないといけないですね…。

----------------------------------------
Feature #5512: Integer#/ の改訂
https://bugs.ruby-lang.org/issues/5512#change-37076

Author: tadf (tadayoshi funaba)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: Next Major


Integer#/ を Integer#quo の別名として定義しなおす事を提案します。

現在の Integer#/ はオペランドが整数である場合値が整数になります。整数を
与えた場合の結果だけを見て、あるいは整数ではない場合の結果だけを見て自
分の望み通りの結果を得たと思い込んでしまうかもしれません。

これついての対処として、Integer#div、または Integer#quo を利用するよう
啓蒙するなどいくつかの提案がありうるでしょうが、本質的な解決法は、やは
り仕様を変更するしかないと思われます。

これはプログラミングにおける総称性の確保の邪魔になり、Numeric#/ を利用
はバグの温床になり得えます。
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.