Ruby Forum Ruby-dev > some odd behaviors of BigDecimal

Posted by Yusuke ENDOH (Guest)
on 04.09.2008 16:52
(Received via mailing list)
$B1sF#$G$9!#(B

BigDecimal 
$B$N%F%9%H$r=q$$$F$$$F!"$$$/$D$+5$$K$J$k5sF0$,$"$j$^$7$?!#(B


1) Infinity $B$N(B n $B>h$,>o$K(B NaN 
$B$K$J$k$N$O0U?^E*$G$7$g$&$+!#(B

 ruby19 -rbigdecimal -e 'x = BigDecimal("Infinity"); p [x**1, x**0, 
x**-1]'
[#<BigDecimal:8261238,'NaN',4(8)>, #<BigDecimal:8261224,'NaN',4(8)>,
#<BigDecimal:8261210,'NaN',4(8)>]

inf ** 0 $B$,(B NaN $B$K$J$k$N$ODj5A<!Bh$@$H;W$$$^$9$,!"(B** 1 
$B$H(B ** -1 $B$O(B
$B$=$l$>$l(B inf $B$H(B 0 $B$r4|BT$7$F$$$^$7$?!#(B
Float $B$@$H0J2<$N$h$&$K$J$j$^$9(B ($B$&$A$N4D6-$N>l9g(B) $B!#(B

$ ruby19 -e 'x = 1.0/0.0; p [x**1, x**0, x**-1]'
[Infinity, 1.0, 0.0]


2) 1E1000..(0 $B$,$$$C$Q$$(B)..000 $B$r(B BigDecimal 
$B$KM?$($k$H(B 0 $B$,JV$k$N$O0U?^E*(B
$B$G$7$g$&$+!#(B

$ ruby19 -rbigdecimal -e 'p BigDecimal("1E1" + "0" * 10000)'
#<BigDecimal:826133c,'0.0',4(8)>

Float $B$@$H(B Infinity $B$K$J$j$^$9!#(B

$ ruby19 -e 'p ("1E1" + "0" * 10000).to_f'
Infinity


3) limit(1) $B$G(B 3 ** 4 $B$r7W;;$9$k$H(B 90 
$B$K$J$j$^$9$,0U?^E*$G$7$g$&$+!#(B

$ ruby19 -rbigdecimal -e 'BigDecimal.limit(1); p BigDecimal("3") ** 4'
#<BigDecimal:8261300,'0.9E2',4(12)>

$B$A$c$s$HDI$C$F$J$$$G$9$,!"(B3 * 3 * 3 * 3 = 10 * 3 * 3 = 30 * 3 = 90 
$B$H(B
$B$J$C$F$$$k$N$+$J$"$H;W$$$^$9!#;EMM$@$H8@$o$l$l$PG<F@$7$^$9!#(B
Posted by Yusuke ENDOH (Guest)
on 17.09.2008 23:42
(Received via mailing list)
$B1sF#$G$9!#(B

2008/09/04 23:46 Yusuke ENDOH <mame@tsg.ne.jp>:
> $B$=$l$>$l(B inf $B$H(B 0 $B$r4|BT$7$F$$$^$7$?!#(B
> #<BigDecimal:826133c,'0.0',4(8)>
> #<BigDecimal:8261300,'0.9E2',4(12)>
>
> $B$A$c$s$HDI$C$F$J$$$G$9$,!"(B3 * 3 * 3 * 3 = 10 * 3 * 3 = 30 * 3 = 90 $B$H(B
> $B$J$C$F$$$k$N$+$J$"$H;W$$$^$9!#;EMM$@$H8@$o$l$l$PG<F@$7$^$9!#(B

$BJV;v$,$J$+$C$?$N$G!"$H$j$"$($:$9$Y$F0U?^E*$H8+$J$7$?%F%9%H$r(B
$B%3%_%C%H$7$^$7$?!#(B(r19401)
Posted by Yukihiro Matsumoto (Guest)
on 18.09.2008 00:47
(Received via mailing list)
$B$^$D$b$H(B $B$f$-$R$m$G$9(B

In message "Re: [ruby-dev:36358] Re: some odd behaviors of BigDecimal"
    on Thu, 18 Sep 2008 02:17:23 +0900, "Yusuke ENDOH" <mame@tsg.ne.jp> 
writes:

|2008/09/04 23:46 Yusuke ENDOH <mame@tsg.ne.jp>:
|> BigDecimal $B$N%F%9%H$r=q$$$F$$$F!"$$$/$D$+5$$K$J$k5sF0$,$"$j$^$7$?!#(B
|>
|>
|> 1) Infinity $B$N(B n $B>h$,>o$K(B NaN $B$K$J$k$N$O0U?^E*$G$7$g$&$+!#(B
|>
|>  ruby19 -rbigdecimal -e 'x = BigDecimal("Infinity"); p [x**1, x**0, x**-1]'
|> [#<BigDecimal:8261238,'NaN',4(8)>, #<BigDecimal:8261224,'NaN',4(8)>,
|> #<BigDecimal:8261210,'NaN',4(8)>]
|>
|> inf ** 0 $B$,(B NaN $B$K$J$k$N$ODj5A<!Bh$@$H;W$$$^$9$,!"(B** 1 $B$H(B ** -1 $B$O(B
|> $B$=$l$>$l(B inf $B$H(B 0 $B$r4|BT$7$F$$$^$7$?!#(B
|> Float $B$@$H0J2<$N$h$&$K$J$j$^$9(B ($B$&$A$N4D6-$N>l9g(B) $B!#(B
|>
|> $ ruby19 -e 'x = 1.0/0.0; p [x**1, x**0, x**-1]'
|> [Infinity, 1.0, 0.0]
|>
|>
|> 2) 1E1000..(0 $B$,$$$C$Q$$(B)..000 $B$r(B BigDecimal $B$KM?$($k$H(B 0 $B$,JV$k$N$O0U?^E*(B
|> $B$G$7$g$&$+!#(B
|>
|> $ ruby19 -rbigdecimal -e 'p BigDecimal("1E1" + "0" * 10000)'
|> #<BigDecimal:826133c,'0.0',4(8)>
|>
|> Float $B$@$H(B Infinity $B$K$J$j$^$9!#(B
|>
|> $ ruby19 -e 'p ("1E1" + "0" * 10000).to_f'
|> Infinity
|>
|>
|> 3) limit(1) $B$G(B 3 ** 4 $B$r7W;;$9$k$H(B 90 $B$K$J$j$^$9$,0U?^E*$G$7$g$&$+!#(B
|>
|> $ ruby19 -rbigdecimal -e 'BigDecimal.limit(1); p BigDecimal("3") ** 4'
|> #<BigDecimal:8261300,'0.9E2',4(12)>
|>
|> $B$A$c$s$HDI$C$F$J$$$G$9$,!"(B3 * 3 * 3 * 3 = 10 * 3 * 3 = 30 * 3 = 90 $B$H(B
|> $B$J$C$F$$$k$N$+$J$"$H;W$$$^$9!#;EMM$@$H8@$o$l$l$PG<F@$7$^$9!#(B
|
|$BJV;v$,$J$+$C$?$N$G!"$H$j$"$($:$9$Y$F0U?^E*$H8+$J$7$?%F%9%H$r(B
|$B%3%_%C%H$7$^$7$?!#(B(r19401)

$B$9$_$^$;$s!#:G6a!"(BBigDecimal$B$,J|CV5$L#$G$9$M!#(B

$B8D?ME*$J0U8+$r=R$Y$k$H!"(B3)$B$K$D$$$F$O$I$&$7$?$b$s$@$+J,$+$j$^(B
$B$;$s$,!"(B1)$B$H(B2)$B$K$D$$$F$O(BFloat$B$K9g$o$;$?J}$,$h$$$H;W$$$^$9!#(B
Posted by Yusuke ENDOH (Guest)
on 18.09.2008 15:52
(Received via mailing list)
$B1sF#$G$9!#(B

2008/09/18 7:39 Yukihiro Matsumoto <matz@ruby-lang.org>:
> |> $ ruby19 -e 'x = 1.0/0.0; p [x**1, x**0, x**-1]'
> |>
> |> $B$J$C$F$$$k$N$+$J$"$H;W$$$^$9!#;EMM$@$H8@$o$l$l$PG<F@$7$^$9!#(B
> |
> |$BJV;v$,$J$+$C$?$N$G!"$H$j$"$($:$9$Y$F0U?^E*$H8+$J$7$?%F%9%H$r(B
> |$B%3%_%C%H$7$^$7$?!#(B(r19401)
>
> $B$9$_$^$;$s!#:G6a!"(BBigDecimal$B$,J|CV5$L#$G$9$M!#(B
>
> $B8D?ME*$J0U8+$r=R$Y$k$H!"(B3)$B$K$D$$$F$O$I$&$7$?$b$s$@$+J,$+$j$^(B
> $B$;$s$,!"(B1)$B$H(B2)$B$K$D$$$F$O(BFloat$B$K9g$o$;$?J}$,$h$$$H;W$$$^$9!#(B

$B;d$b$=$&;W$$$^$9!#$=$N$h$&$K$7$F%3%_%C%H$7$^$7$?!#(B

$ ./ruby -rbigdecimal -e '(-2..2).each {|n| p (BigDecimal("-Infinity")
** n).to_f }'
0.0
-0.0
1.0
-Infinity
Infinity

$ ./ruby -rbigdecimal -e '%w(1E1 -1E1 1E-1 -1E-1).each {|s| p
BigDecimal(s + "0" * 10000).to_f }'
Infinity
-Infinity
0.0
-0.0