# \[Bug #3267\] BigDecimal/math$B$G(Batan()$B$K(B1.08$B$rF~$l$k$HLa$jCM$NM-8z7e?t$,B-$j$J$$(B

**URL:** <https://www.ruby-forum.com/t/bug-3267-bigdecimal-math-b-g-batan-b-k-b1-08-b-rf-l-k-hla-jcm-nm-8z7e-t-b-j-j-b/188370>\
**Category:** Development\
**Created:** [May 11, 2010, 12:07am UTC](https://www.ruby-forum.com/t/bug-3267-bigdecimal-math-b-g-batan-b-k-b1-08-b-rf-l-k-hla-jcm-nm-8z7e-t-b-j-j-b/188370 "2010-05-11T00:07:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![SSwanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/d6d6ee/32.png) [@SSwanabe](https://www.ruby-forum.com/u/SSwanabe)\
**Post date:** [May 11, 2010, 12:07am UTC](https://www.ruby-forum.com/t/bug-3267-bigdecimal-math-b-g-batan-b-k-b1-08-b-rf-l-k-hla-jcm-nm-8z7e-t-b-j-j-b/188370/1 "2010-05-11T00:07:35Z")

</div>

Bug #3267:  
BigDecimal/mathe$B$Ge(Batan()e$B$Ke(B1.08e$B$rF~$l$k$HLa$jCM$NM-8z7e?t$,B-$j$J$$e(B  
[http://redmine.ruby-lang.org/issues/show/3267](http://redmine.ruby-lang.org/issues/show/3267)

e$B5/I\<\<Te(B: \_ wanabe  
e$B%9%F!\<%?%9e(B: Open, e$BM%@hEYe(B: Normal  
e$BC4Ev\<Te(B: Kenta M.  
ruby -v: ruby 1.9.2dev (2010-05-04 trunk 27600) [i386-mingw32]

[2ch.net](http://2ch.net) e$B\>e$GJs9p$,$"$C$?$N$GE\>:$7$^$9!#e(B

Rubye$B$K$D$$$Fe(B Part 40  
[http://pc12.2ch.net/test/read.cgi/tech/1272248179/121-122](http://pc12.2ch.net/test/read.cgi/tech/1272248179/121-122)

Rubye$B$N%H%i%s%/$Ne(BBigDecimal/math  
atan()e$B$Ke(B1.08e$B$rF~$l$k$HLa$jCM$NM-8z7e?t$,B-$j$J$$e(B

return pi.div(neg ? -2 : 2, prec) if x.infinite?  
return pi / (neg ? -4 : 4) if x.round(prec) == 1

- x = 1 / x if inv = x \> 1  
x = (-1 + sqrt(1 + x\*\*2, prec))/x if dbl = x \> 0.5

irb(main):004:0\> BigDecimal(“1”)/BigDecimal(“1.08”)  
=\> #\<BigDecimal:9940ce4,‘0.9259259259 25926E0’,16(24)\>  
irb(main):005:0\> BigDecimal(“1”).div(BigDecimal(“1.08”), 30)  
=\> #\<BigDecimal:9957468,‘0.9259259259 2592592592 5925925926E0’,32(44)\>  
irb(main):006:0\>

e$B$3$3$G7e?t$,B-$j$J$/$J$k$N$M!#e(B  
e$BJ,Jl$HJ,;R$NM-8z7e?t$,\>/$J$$$H$-$K!“=PNO$NM-8z7e?t$N;XDj$,L5$$\>l9g$O!“e(B  
e$BE,Ev$K$A$g$s$.$k$N$O!“8@8l;EMME\*$K$O!”@52r$G$”$j$^$7$g$&!#e(B  
1/3e$B$,Mh$?$i!”%a%b%j$rA4It;H$$@Z$j$^$7$?!“$G$OHa$7$$!#e(B  
e$B$O$$!“e(B  
x = BigDecimal(“1”).div(x, prec)  
e$B$G!”$J$\*$j$^$9!#e(B  
y = tan(atan(x, prec), prec)  
e$B$G!”%k!\<%W$r2v$7$F!“e(Bxe$B$He(Bye$B$NCM$rHf3S$7$F$$$F$?$i!”$?$^$?$^H/8+$7$^$7$?!#e(B  
e$B$“!”%H%i%s%/$K$Oe(Btane$B$O$J$$$N$@$1$I!“e(Bsine$B$He(Bcose$B$NAH$\_9g$o$;$G4V$K9g$o$;$^$7$?!#e(B  
tane$B$O%Q%C$H8+!”\<}B+$,CY$$$h$&$J$N$G8e2s$7!#e(B

e$B$“$H!“e(Bexpe$B$N@dBPCM$,Bg$-$/$J$k$H!“La$C$FMh$J$$$N$h$M!#e(B  
exp(a\*b+c) = exp(a)\*\*b \* exp(c)  
e$B$r;H$&$H!“9,$;$K$J$l$k$+$b!#!J$s==G$N0RNO$G!Ke(B  
e$B$s$G!“e(Bpowere$B$bA4It$N7e$r7W;;$7$F$46lO+$5$s$J$s$@$,!“e(Bintegere$B$G$O$J$$$N$@$+$i!”$=$s$J$K5$D%$i$J$/$F$be(B…  
e$B$H$O!”;W$$$^$9!#e(B  
expe$B$HF1$8MWNN$G$d$k$H!”\<B9TB.EY$,$:$$$V$sB.$/$J$j$^$9!#e(B  
e$B!Je(BRubye$B$N%3!\<%I$+$ie(Bpowere$B$re(Bcalle$B$9$k$s$@$,!”$=$l$G$b$H$F$bB.$$!#e(B  
e$B%=!\<%9$r=q$-49$($k\<j$b$”$k$N$@$1$I!”%3%s%Q%$%k$9$k$N$,$a$s$I$/$5$$!#e(B  
e$B$=$b$=$b!“$=$N\<j$NO+NO$r1^$o$J$$?M$O!”$3$C$A$KMh$J$/$FNI$$$G$7$ge(B)

loge$B$O!“e(Bexponente$B$,Ii$N\>l9g!“e(B  
e$B$r=q$$$F$”$k$+$i!”@5$Ge(B2e$B7e0J\>e$N\>l9g!“$rDI2C$9$k$HNI$$$G$9$M!#e(B  
expe$B$He(Bloge$B$,\<BMQHO0OFb$K$J$k$H!”\<B?te(B\*\*e$B\<B?t$,!J\<BMQE\*$K!K;H$($k$h$&$K$J$j$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![SSwanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/d6d6ee/32.png) [@SSwanabe](https://www.ruby-forum.com/u/SSwanabe)\
**Post date:** [May 11, 2010, 4:51am UTC](https://www.ruby-forum.com/t/bug-3267-bigdecimal-math-b-g-batan-b-k-b1-08-b-rf-l-k-hla-jcm-nm-8z7e-t-b-j-j-b/188370/2 "2010-05-11T04:51:31Z")

</div>

e$B$`$i$?$G$9!#e(B

On 2010/05/11, at 7:06, \_ wanabe wrote:

> Rubye$B$N%H%i%s%/$Ne(BBigDecimal/math  
> atan()e$B$Ke(B1.08e$B$rF~$l$k$HLa$jCM$NM-8z7e?t$,B-$j$J$$e(B
> 
> return pi.div(neg ? -2 : 2, prec) if x.infinite?  
> return pi / (neg ? -4 : 4) if x.round(prec) == 1
> 
> - x = 1 / x if inv = x \> 1  
> x = (-1 + sqrt(1 + x\*\*2, prec))/x if dbl = x \> 0.5

(snip)

> e$B$O$$!“e(B  
> x = BigDecimal(“1”).div(x, prec)  
> e$B$G!”$J$\*$j$^$9!#e(B

e$B$3$l$K4X$7$F$O!"0J2\<$N=$@5$r%3%\_%C%H$7$^$9!#e(B  
e$B%P%0$@$H;W$&$N$Ge(B 1.9.2 e$B$N%V%i%s%A$K$b%^!\<%8$7$^$9!#e(B

diff --git a/ext/bigdecimal/lib/bigdecimal/math.rb  
b/ext/bigdecimal/lib/bigdecimal/math.rb  
index eeffde4…07efcbe 100644  
— a/ext/bigdecimal/lib/bigdecimal/math.rb  
+++ b/ext/bigdecimal/lib/bigdecimal/math.rb  
@@ -125,7 +125,7 @@ module BigMath  
x = -x if neg = x \< 0  
return pi.div(neg ? -2 : 2, prec) if x.infinite?  
return pi / (neg ? -4 : 4) if x.round(prec) == 1

- x = 1 / x if inv = x \> 1

- x = BigDecimal(“1”).div(x, prec) if inv = x \> 1  
x = (-1 + sqrt(1 + x\*\*2, prec))/x if dbl = x \> 0.5  
n = prec + BigDecimal.double\_fig  
y = x  
diff --git a/test/bigdecimal/test\_bigmath.rb  
b/test/bigdecimal/test\_bigmath.rb  
index fbeb062…453c47e 100644  
— a/test/bigdecimal/test\_bigmath.rb  
+++ b/test/bigdecimal/test\_bigmath.rb  
@@ -57,6 +57,8 @@ class TestBigMath \< Test::Unit::TestCase  
assert\_in\_delta(Math::PI/4, atan(BigDecimal(“1.0”), N))  
assert\_in\_delta(Math::PI/6, atan(sqrt(BigDecimal(“3.0”), N) / 3,  
N))  
assert\_in\_delta(Math::PI/2, atan(PINF, N))
- 

assert\_equal(BigDecimal(“0.823840753418636291769355073102514088959345624027952954058347023122539489”),

- 

```
            atan(BigDecimal("1.08"), 72).round(72), 

```

‘[ruby-dev:41257]’)  
end

def test\_exp

> y = tan(atan(x, prec), prec)  
> e$B$G!“%k!\<%W$r2v$7$F!“e(Bxe$B$He(Bye$B$NCM$rHf3S$7$F$$$F$?$i!”$?$^$?$^H/8+$7$^$7$?!#e(B  
> e$B$”!"%H%i%s%/$K$Oe(Btane$B$O$J$$$N$@$1$I!“e(Bsine$B$He(Bcose$B$NAH$\_9g$o$;$G4V$K9g$o$;$^$7$?!#e(B  
> tane$B$O%Q%C$H8+!”\<}B+$,CY$$$h$&$J$N$G8e2s$7!#e(B

BigMath.tan e$B$NIT:\_$K$D$$$F$O!"e(B1.9.3 e$B$GF3F~$G$-$l$P$d$j$^$9!#e(B  
e$B$3$l$O!"8e$[$Ie(B Feature e$B%A%1%C%H$H$7$FJ,N%$5$;$^$9!#e(B

> e$B$"$H!"e(Bexpe$B$N@dBPCM$,Bg$-$/$J$k$H!"La$C$FMh$J$$$N$h$M!#e(B  
> exp(a\*b+c) = exp(a)\*\*b \* exp(c)  
> e$B$r;H$&$H!"9,$;$K$J$l$k$+$b!#!J$s==G$N0RNO$G!Ke(B

e$B$3$l$He(B

> e$B$s$G!“e(Bpowere$B$bA4It$N7e$r7W;;$7$F$46lO+$5$s$J$s$@$,!“e(Bintegere$B$G$O$J$$$N$@$+$i!”$=$s$J$K5$D%$i$J$/$F$be(B…  
> e$B$H$O!”;W$$$^$9!#e(B  
> expe$B$HF1$8MWNN$G$d$k$H!“\<B9TB.EY$,$:$$$V$sB.$/$J$j$^$9!#e(B  
> e$B!Je(BRubye$B$N%3!\<%I$+$ie(Bpowere$B$re(Bcalle$B$9$k$s$@$,!”$=$l$G$b$H$F$bB.$$!#e(B

e$B$3$l$He(B

> loge$B$O!“e(Bexponente$B$,Ii$N\>l9g!“e(B  
> e$B$r=q$$$F$”$k$+$i!”@5$Ge(B2e$B7e0J\>e$N\>l9g!“$rDI2C$9$k$HNI$$$G$9$M!#e(B  
> expe$B$He(Bloge$B$,\<BMQHO0OFb$K$J$k$H!”\<B?te(B\*\*e$B\<B?t$,!J\<BMQE\*$K!K;H$($k$h$&$K$J$j$^$9!#e(B

e$B$3$l$b!"$=$l$\>$lFHN)$Ne(B Feature e$B%A%1%C%H$KJ,N%$7!"e(B  
1.9.3 e$B$G2~A1$9$k$3$H$rL;X$7$^$9!#e(B

–  
Kenta M.  
OpenPGP FP = FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC

e$BK$r=q$-$^$7$?e(B!!  
e$B!Xe(BRuby e$B5U0z$-%l%7%T!Ye(B

> **[Ruby 逆引きレシピ すぐに美味しいサンプル&amp;テクニック 232 (PROGRAMMER’S RECIPE) | 島田 浩二, 設樂 洋爾, 村田...](https://www.amazon.co.jp/%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AC%E3%82%B7%E3%83%94-%E3%81%99%E3%81%90%E3%81%AB%E7%BE%8E%E5%91%B3%E3%81%97%E3%81%84%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB-%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-PROGRAMMER%E2%80%99S-RECIPE/dp/4798119881)**
>
> Amazonで島田 浩二, 設樂 洋爾, 村田 賢太, 前田 智樹, 谷口 文威のRuby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)。アマゾンならポイント還元本が多数。島田 浩二, 設樂 洋爾, 村田 賢太, 前田 智樹, 谷口 文威作品ほか、お急ぎ便対象商品は当日お届けも可能。またRuby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)もアマゾン配送商品なら通常配送無料。

E-mail: removed\_email\_address@domain.invalid  
twitter: [http://twitter.com/mrkn/](http://twitter.com/mrkn/)  
blog: [ドレッシングのような](http://d.hatena.ne.jp/mrkn/)

---

<div class="post-metadata">

**Author:** ![SSwanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/d6d6ee/32.png) [@SSwanabe](https://www.ruby-forum.com/u/SSwanabe)\
**Post date:** [May 11, 2010, 7:17am UTC](https://www.ruby-forum.com/t/bug-3267-bigdecimal-math-b-g-batan-b-k-b1-08-b-rf-l-k-hla-jcm-nm-8z7e-t-b-j-j-b/188370/3 "2010-05-11T07:17:52Z")

</div>

e$B%A%1%C%He(B #3267 e$B$,99?7$5$l$^$7$?!#e(B (by Kenta M.)

e$B%9%F!\<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B  
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

This issue was solved with changeset r27734.  
\_, thank you for reporting this issue.  
Your contribution to Ruby is greatly appreciated.  
May Ruby be with you.

* * *

[http://redmine.ruby-lang.org/issues/show/3267](http://redmine.ruby-lang.org/issues/show/3267)
