Math $B%b%8%e!<%k$N8_49@-(B(was: Math::atan2(0, 0) on ruby 1.9.2)

e$B5WJ]$G$9!#e(B

Mathe$B%b%8%e!<%k$N4X?t$N8_49@-$ND4::$G$9!#D4::$N=gHV$Oe(B math.c
e$B$GDj5A$5$le(B
e$B$F$$$k=g=x$G!“A4e(B26e$B8D$N4X?t$N$&$A!”:G=i$Ne(B7e$B8D$N$_D4::$7$^$7$?!#;D$j$Ne(B19
e$B8D$K$D$$$F$O$f$C$/$je(B(e$B=5$K0l2s$0$i$$!)e(B)e$BD4$Y$F$$$-$^$9!#e(B

3,
4e$B2s8+D>$7$?$1$I!“$=$N$?$S$K4V0c$$$,8+IU$+$k$N$G!”$^$@4V0c$$$,;D$C$Fe(B
e$B$$$k2DG=@-$,$"$j$^$9!#e(Bm(__)m

e$B%A%'%C%/9`L$O0J2<$Ne(B2e$B$D!#e(B

(1) SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

libm e$B$,%*%W%7%g%s$NF0:ne(B(*1)e$B$b4^$a$Fe(B SUSv3
e$B$K=`5r$7$F$$$k$H2>Dj$7e(B
e$B$?>e$G!"e(B1.9.1 e$B$He(B trunk e$B$NHs8_49$r%A%'%C%/!#e(B

*1 SUSv3 e$B$N;EMM=q$Ne(B [MX]|X> e$B$He(B <X| e$B$G0O$^$l$?ItJ,e(B

(2) trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

trunk
e$B$G$O?t3X4X?t$r8F$VA0$KHO0O%A%‘%C%/$r9T$J$C$F$$$k!#HO0O%A%’%Ce(B
e$B%/$rDL$C$?8e$K%W%i%C%H%U%)!<%`0MB8$NF0:n$r5/$3$92DG=@-$N$"$k2U=j$re(B
e$B%A%'%C%/$7$?!#6qBNE*$K$O!"e(BSUSv3
e$B$G%*%W%7%g%s$NF0:n$H$5$l$F$$$kItJ,e(B
e$B$H!"e(BSUSv2 e$B$Ge(B either … or …
e$B$H=q$+$l$F$$$kItJ,$G$9!#e(B

e$B$A$J$_$K$3$l$O!V2DG=@-!W$N%A%'%C%/$G$“$C$F!#<B:]$K%W%i%C%H%U%)!<%`0Me(B
e$BB8$,$”$k$+$I$&$+$OITL@$G$9!#=EH"$N6y$r$D$D$$$F$$$k$h$&$J46$8$,$9$k2Ue(B
e$B=j$b$“$C$?$1$I!”$=$N$^$^5-:$7$^$7$?!#e(B

e$B$A$J$_$K!“Hs8_49$N>pJs$r5s$2$k$N$@$1$,L\E*$G$9!#%3%a%s%H$rIU$1$F$$$k2Ue(B
e$B=j$,$”$j$^$9$,!":#8e$N%P!<%8%g%s$GBP=h$9$Y$-$+$I$&$+$H$$$&2ACMH=CG$O9Te(B
e$B$J$C$F$$$^$;$s!#e(B
([ruby-core:28286]e$B$r8+$k$H!“0U?^E*$JHs8_49$b$”$j$=$&$G$9$7e(B)

  1. atan2
    ========

1.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B?t$,B?$$$N$GI=7A<0$r;HMQ!#EyI}%U%)%s%H$r;HMQ$7$F$/$@$5$$!#e(B

      e$B<0e(B                    1.9.1     trunk
------------------------- -------- ------------
  1. atan2(e$B@5$NM-8BCMe(B, -Inf) +PI DomainError
  2. atan2(e$BIi$NM-8BCMe(B, -Inf) -PI DomainError
  3. atan2(e$B@5$NM-8BCMe(B, +Inf) +0.0 DomainError
  4. atan2(e$BIi$NM-8BCMe(B, +Inf) -0.0 DomainError
  5. atan2(+Inf, e$B@5Ii$NM-8BCMe(B) +PI/2 DomainError
  6. atan2(-Inf, e$B@5Ii$NM-8BCMe(B) -PI/2 DomainError
  7. atan2(+Inf, -Inf) +3PI/4 DomainError
  8. atan2(-Inf, -Inf) -3PI/4 DomainError
  9. atan2(+Inf, +Inf) +PI/4 DomainError
  10. atan2(-Inf, +Inf) -PI/4 DomainError

1.9.1 e$B$N5sF0$Ne(B 1e$B!Ae(B6
e$B$^$G$O?t3XE*$K8+$F$b0UL#$,$"$j$=$&!#?t<0$G$I$&$3$&e(B
e$B$H$$$&$N$O$o$+$i$J$$$,!"e(BWikipedia
e$B$Ne(B3e$B<!85%0%i%Ue(B(*2)e$B$r8+$k$H!"e(Bxe$B<4!"e(Bye$B<4e(B
e$B$NJRJ}$rL58B$K?-$P$7$?>l9g$r9M$($k$He(B 1.9.1
e$B$NCM$O@5$7$=$&$G$9!#e(B

*2 atan2 - Wikipedia

7e$B!Ae(B10 e$B$O?t3XE*$K$O$“$d$7$$!#Nc$($P!“e(Batan2(y, x)
e$B$NLa$jCM$,e(B +PI/4 e$B$K$Je(B
e$B$k$?$a$K$Oe(B y/x == 1 e$B$G$”$kI,MW$,$”$k$,!"e(B+Inf
e$BF1;N$NHfN($O$J$s$i$+$NA0e(B
e$BDs>r7o$r$D$1$J$$8B$jIT2DG=$J$?$a!#e(B

1.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. atan2(y, x) e$B$Ne(B y, x e$B$N$I$A$i$+$,e(B NaN → NaN

SUSv2 e$B$G$O>e5-$NDL$j$NCM$rLa$9$3$H$K$J$C$F$$$k$N$KBP$7!"e(BSUSv3
e$B$G$O%*%We(B
e$B%7%g%s$NF0:n$K3J2<$2$5$l$F$$$k!#e(B

  1. cos
    ======

2.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

2.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. cos(NaN) → NaN
  2. cos(+0.0) → 1.0
  3. cos(-0.0) → 1.0
  4. cos(+Inf) → SUSv3 e$B$G$Oe(B NaN e$B$^$?$O<BAu0MB8$NCM!"e(BSUSv2
    e$B$G$Oe(B 0.0 e$B$^$?$Oe(B NaN
  5. cos(-Inf) → SUSv3 e$B$G$Oe(B NaN e$B$^$?$O<BAu0MB8$NCM!"e(BSUSv2
    e$B$G$Oe(B 0.0 e$B$^$?$Oe(B NaN

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1, 4, 5
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3 e$B$N5-=R$O$J$$!#e(B
(2, 3 e$B$K4X$7$F$O!“IaDL$K9M$($l$Pe(B 1.0
e$B0J30$NCM$rLa$9$3$H$O$”$j$($J$$$He(B
e$B;W$&$,e(B…)

  1. sin
    ======

3.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

3.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. sin(NaN) → NaN
  2. sin(+0.0) → +0.0
  3. sin(-0.0) → -0.0
  4. sin(e$BHs@55,?te(B*3) → SUSv3e$B$G$O0z?t$NCM!"e(BSUSv2(*4)
    e$B$G$Oe(B 0.0
  5. sin(+Inf) → SUSv3 e$B$G$Oe(B NaN e$B$^$?$O<BAu0MB8$NCM!"e(BSUSv2
    e$B$G$Oe(B 0.0 e$B$^$?$Oe(B NaN
  6. sin(-Inf) → SUSv3 e$B$G$Oe(B NaN e$B$^$?$O<BAu0MB8$NCM!"e(BSUSv2
    e$B$G$Oe(B 0.0 e$B$^$?$Oe(B NaN

*3 e$BHs@55,?te(B(subnormal)e$B$H$O!"e(Bdouble e$B$N>l9g!“e(B-1.0E-95
e$B$He(B +1.0E-95 e$B$N4V$Ne(B
0e$B0J30$NCM!#e(B
*4 SUSv2
e$B$N;EMM=q$G$O!VLa$jCM$,%”%s%@!<%U%m!<$7$?$H$-!W$H5-=R$5$l$F$$e(B
e$B$k!#0z?t$,Hs>o$K>.$5$$$H$-!“La$jCM$O0z?t$H$[$\F1$8CM$K$J$k$N$G!VLae(B
e$B$jCM$,%”%s%@!<%U%m!<!We(B → e$B!VLa$jCM$,Hs@55,?t!We(B →
e$B!V0z?t$,Hs@55,?t!We(B
e$B$H$$$C$?O@K!!#e(B

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1,4,5,6
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3 e$B$N5-=R$O$J$$!#e(B

  1. tan
    ======

4.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

4.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. tan(NaN) → NaN
  2. tan(+0.0) → +0.0
  3. tan(-0.0) → -0.0
  4. tan(e$BHs@55,?te(B) → SUSv3 e$B$G$O0z?t$NCM!"e(BSUSv2(*4)e$B$G$Oe(B
    0.0
  5. tan(+Inf) → SUSv3 e$B$G$Oe(B NaN e$B$^$?$O<BAu0MB8$NCM!"e(BSUSv2
    e$B$G$Oe(B 0.0 e$B$^$?$Oe(B NaN
  6. tan(-Inf) → SUSv3 e$B$G$Oe(B NaN e$B$^$?$O<BAu0MB8$NCM!"e(BSUSv2
    e$B$G$Oe(B 0.0 e$B$^$?$Oe(B NaN
  7. tan(e$BM-8BCMe(B) e$B$,e(B overflow e$B$7$?$H$-e(B → ±Inf

SUSv3 e$B$G$Oe(B 1,2,3,4,5,6 e$B$,%*%W%7%g%s$NF0:n$G!"e(B7 e$B$Oe(B XSI
e$B3HD%$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1, 4, 5, 6,7 e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3
e$B$N5-=R$O$J$$!#e(B

  1. acos
    =======

5.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$O$"$k$,!"5sF0$NJQ2=$J$7!#e(B

5.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. acos(NaN) → NaN
  2. acos(+1.0) → +0.0

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1 e$B$ODj5Ae(B
e$B$5$l$F$$$k$,!"e(B2 e$B$N5-=R$O$J$$!#e(B

  1. asin
    =======

6.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

SUSv3 e$B$K$O!"e(B
If x is subnormal, a range error may occur and x should be returned.
e$B$H=q$+$l$F$$$k$N$G!"0z?t$,Hs@55,?t$N$H$-<BAu$K$h$C$F$Oe(B errno
e$B$Ke(B ERANGE
e$B$,@_Dj$5$l$k!#$3$N$H$-e(B 1.9.1 e$B$G$Oe(B Errno::ERANGE
e$BNc30$,5s$,$k!#e(B
e$B0lJ}!"e(Btrunk e$B$G$ONc30$r5s$2$J$$!#e(B

6.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. asin(NaN) → NaN
  2. asin(+0.0) → +0.0
  3. asin(-0.0) → -0.0
  4. asin(e$BHs@55,?te(B) → SUSv3
    e$B$G$O0z?t$NCM!#e(BSUSv2(*4)e$B$G$Oe(B 0.0

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1, 4 e$B$Oe(B
e$BDj5A$5$l$F$$$k$,!"e(B2, 3 e$B$N5-=R$O$J$$!#e(B

  1. atan
    =======

7.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

7.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. atan(NaN) → NaN
  2. atan(+0.0) → +0.0
  3. atan(-0.0) → -0.0
  4. atan(+Inf) → +PI/2
  5. atan(-Inf) → -PI/2
  6. atan(e$BHs@55,?te(B) → SUSv3
    e$B$G$O0z?t$NCM!#e(BSUSv2(*4)e$B$G$Oe(B 0.0

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1, 6 e$B$Oe(B
e$BDj5A$5$l$F$$$k$,!"e(B2, 3, 4, 5 e$B$N5-=R$O$J$$!#e(B

e$B5WJ]$G$9!#e(B

Mathe$B%b%8%e!<%k$N4X?t$N8_49@-$ND4::BhFs2s$G$9!#A4e(B26e$B8D$N4X?t$N$&$Ae(B
e$BBh0l2s$O:G=i$Ne(B7e$B8De(B(atan2, cos, sin, tan, acos, asin,
atan)e$B$G!"BhFs2s$Ne(B
e$B:#2s$O<!$Ne(B7e$B8De(B(cosh, sinh, tanh, acosh, asinh, atanh,
exp)e$B$G$9!#e(B

e$B%A%'%C%/9`L$O0J2<$Ne(B2e$B$D!#e(B

(1) SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

(2) trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

e$BIaDL$K9M$($l$PEvA3$NF0:n$H8@$($k$b$N$be(B SUSv3 

e$B$G$O%*%W%7%g%s$NF0:ne(B
e$B$K$J$C$F$$$kLOMM!#EvA3$8$c$J$$F0:n$r$9$k<BAu$b$"$k$+$i$J$N$+!)e(B

e$B>$7$/$Oe(B ruby-dev:42155 e$B$r;2>H!#e(B
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/42155

  1. cosh
    =======

8.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

8.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. cosh(NaN) → NaN
  2. cosh(+0.0) → 1.0
  3. cosh(-0.0) → 1.0
  4. cosh(+Inf) → +Inf
  5. cosh(-Inf) → +Inf

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1, 4, 5
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3 e$B$N5-=R$O$J$$!#e(B

  1. sinh
    =======

9.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

9.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. sinh(NaN) → NaN
  2. sinh(+0.0) → +0.0
  3. sinh(-0.0) → -0.0
  4. sinh(+Inf) → +Inf
  5. sinh(-Inf) → -Inf
  6. sinh(e$BHs@55,?te(B) → SUSv3 e$B$G$Oe(B e$B0z?t$NCM!"e(BSUSv2
    e$B$G$Oe(B 0.0

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1, 6
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3, 4, 5 e$B$N5-=R$O$J$$!#e(B

  1. tanh
    ========

10.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

10.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. tanh(NaN) → NaN
  2. tanh(+0.0) → +0.0
  3. tanh(-0.0) → -0.0
  4. tanh(+Inf) → +1.0
  5. tanh(-Inf) → -1.0
  6. tanh(e$BHs@55,?te(B) → SUSv3 e$B$G$Oe(B e$B0z?t$NCM!"e(BSUSv2
    e$B$G$Oe(B 0.0

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1, 6
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3, 4, 5 e$B$N5-=R$O$J$$!#e(B

  1. acosh
    =========

11.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$O$"$k$,!"5sF0$NJQ2=$J$7!#e(B

11.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. acosh(NaN) → NaN
  2. acosh(+1.0) → +0.0
  3. acosh(+Inf) → +Inf

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3 e$B$N5-=R$O$J$$!#e(B

  1. asinh
    =========

12.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

12.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. asinh(NaN) → NaN
  2. asinh(+0.0) → +0.0
  3. asinh(-0.0) → -0.0
  4. asinh(+Inf) → +Inf
  5. asinh(-Inf) → -Inf
  6. asinh(e$BHs@55,?te(B) → SUSv3 e$B$G$Oe(B e$B0z?t$NCMe(B

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3, 4, 5, 6 e$B$N5-=R$O$J$$!#e(B

  1. atanh
    =========

13.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

                       1.9.1        trunk
---------------- ----------------  -------
  1. atanh(e$BHs@55,?te(B) Errno::ERANGE(*5) e$B0z?t$NCMe(B
  2. atanh(+1.0) Errno::ERANGE +Inf
  3. atanh(-1.0) Errno::ERANGE -Inf

*5 e$B;EMM=q$K$Oe(B “a range error may occur”
e$B$H=q$+$l$F$$$k!#Nc30$r>e$2$k$+!"e(B
trunk e$B$HF1$8F0:n$r$9$k$+$O<BAu$K0MB8$9$k!#e(B

13.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. atanh(NaN) → NaN
  2. atanh(+0.0) → +0.0
  3. atanh(-0.0) → -0.0
  4. atanh(e$BHs@55,?te(B) → SUSv3 e$B$G$Oe(B e$B0z?t$NCMe(B

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3, 4 e$B$N5-=R$O$J$$!#e(B

  1. exp
    =======

14.1. SUSv3e$B=`5r4D6-$G$Ne(B 1.9.1 e$B$He(B trunk e$B$NHs8_49e(B

e$B%=!<%9%3!<%I$NJQ99$,$J$$$N$GHs8_49$J$7e(B

14.2. trunk e$B$G$N%W%i%C%H%U%)!<%`4V$NHs8_49$N2DG=@-e(B

  1. exp(NaN) → NaN
  2. exp(+0.0) → 1.0
  3. exp(-0.0) → 1.0
  4. exp(+Inf) → +Inf
  5. exp(-Inf) → +0.0

SUSv3 e$B$G$O>e5-$9$Y$F%*%W%7%g%s$NF0:n$H$J$C$F$$$k!#e(BSUSv2
e$B$G$O!"e(B1
e$B$ODj5A$5$l$F$$$k$,!"e(B2, 3, 4, 5 e$B$N5-=R$O$J$$!#e(B