package math
var _lgamA = [...]float64{
7.72156649015328655494e-02,
3.22467033424113591611e-01,
6.73523010531292681824e-02,
2.05808084325167332806e-02,
7.38555086081402883957e-03,
2.89051383673415629091e-03,
1.19270763183362067845e-03,
5.10069792153511336608e-04,
2.20862790713908385557e-04,
1.08011567247583939954e-04,
2.52144565451257326939e-05,
4.48640949618915160150e-05,
}
var _lgamR = [...]float64{
1.0,
1.39200533467621045958e+00,
7.21935547567138069525e-01,
1.71933865632803078993e-01,
1.86459191715652901344e-02,
7.77942496381893596434e-04,
7.32668430744625636189e-06,
}
var _lgamS = [...]float64{
-7.72156649015328655494e-02,
2.14982415960608852501e-01,
3.25778796408930981787e-01,
1.46350472652464452805e-01,
2.66422703033638609560e-02,
1.84028451407337715652e-03,
3.19475326584100867617e-05,
}
var _lgamT = [...]float64{
4.83836122723810047042e-01,
-1.47587722994593911752e-01,
6.46249402391333854778e-02,
-3.27885410759859649565e-02,
1.79706750811820387126e-02,
-1.03142241298341437450e-02,
6.10053870246291332635e-03,
-3.68452016781138256760e-03,
2.25964780900612472250e-03,
-1.40346469989232843813e-03,
8.81081882437654011382e-04,
-5.38595305356740546715e-04,
3.15632070903625950361e-04,
-3.12754168375120860518e-04,
3.35529192635519073543e-04,
}
var _lgamU = [...]float64{
-7.72156649015328655494e-02,
6.32827064025093366517e-01,
1.45492250137234768737e+00,
9.77717527963372745603e-01,
2.28963728064692451092e-01,
1.33810918536787660377e-02,
}
var _lgamV = [...]float64{
1.0,
2.45597793713041134822e+00,
2.12848976379893395361e+00,
7.69285150456672783825e-01,
1.04222645593369134254e-01,
3.21709242282423911810e-03,
}
var _lgamW = [...]float64{
4.18938533204672725052e-01,
8.33333333333329678849e-02,
-2.77777777728775536470e-03,
7.93650558643019558500e-04,
-5.95187557450339963135e-04,
8.36339918996282139126e-04,
-1.63092934096575273989e-03,
}
func ( float64) ( float64, int) {
const (
= 1.461632144968362245
= 1 << 52
= 1 << 53
= 1 << 58
= 1.0 / (1 << 70)
= 1.46163214496836224576e+00
= -1.21486290535849611461e-01
= -3.63867699703950536541e-18
)
= 1
switch {
case IsNaN():
=
return
case IsInf(, 0):
=
return
case == 0:
= Inf(1)
return
}
:= false
if < 0 {
= -
= true
}
if < {
if {
= -1
}
= -Log()
return
}
var float64
if {
if >= {
= Inf(1)
return
}
:= sinPi()
if == 0 {
= Inf(1)
return
}
= Log(Pi / Abs(*))
if < 0 {
= -1
}
}
switch {
case == 1 || == 2:
= 0
return
case < 2:
var float64
var int
if <= 0.9 {
= -Log()
switch {
case >= ( - 1 + 0.27):
= 1 -
= 0
case >= ( - 1 - 0.27):
= - ( - 1)
= 1
default:
=
= 2
}
} else {
= 0
switch {
case >= ( + 0.27):
= 2 -
= 0
case >= ( - 0.27):
= -
= 1
default:
= - 1
= 2
}
}
switch {
case 0:
:= *
:= _lgamA[0] + *(_lgamA[2]+*(_lgamA[4]+*(_lgamA[6]+*(_lgamA[8]+*_lgamA[10]))))
:= * (_lgamA[1] + *(+_lgamA[3]+*(_lgamA[5]+*(_lgamA[7]+*(_lgamA[9]+*_lgamA[11])))))
:= * +
+= ( - 0.5*)
case 1:
:= *
:= *
:= _lgamT[0] + *(_lgamT[3]+*(_lgamT[6]+*(_lgamT[9]+*_lgamT[12])))
:= _lgamT[1] + *(_lgamT[4]+*(_lgamT[7]+*(_lgamT[10]+*_lgamT[13])))
:= _lgamT[2] + *(_lgamT[5]+*(_lgamT[8]+*(_lgamT[11]+*_lgamT[14])))
:= * - ( - *(+*))
+= ( + )
case 2:
:= * (_lgamU[0] + *(_lgamU[1]+*(_lgamU[2]+*(_lgamU[3]+*(_lgamU[4]+*_lgamU[5])))))
:= 1 + *(_lgamV[1]+*(_lgamV[2]+*(_lgamV[3]+*(_lgamV[4]+*_lgamV[5]))))
+= (-0.5* + /)
}
case < 8:
:= int()
:= - float64()
:= * (_lgamS[0] + *(_lgamS[1]+*(_lgamS[2]+*(_lgamS[3]+*(_lgamS[4]+*(_lgamS[5]+*_lgamS[6]))))))
:= 1 + *(_lgamR[1]+*(_lgamR[2]+*(_lgamR[3]+*(_lgamR[4]+*(_lgamR[5]+*_lgamR[6])))))
= 0.5* + /
:= 1.0
switch {
case 7:
*= ( + 6)
fallthrough
case 6:
*= ( + 5)
fallthrough
case 5:
*= ( + 4)
fallthrough
case 4:
*= ( + 3)
fallthrough
case 3:
*= ( + 2)
+= Log()
}
case < :
:= Log()
:= 1 /
:= *
:= _lgamW[0] + *(_lgamW[1]+*(_lgamW[2]+*(_lgamW[3]+*(_lgamW[4]+*(_lgamW[5]+*_lgamW[6])))))
= (-0.5)*(-1) +
default:
= * (Log() - 1)
}
if {
= -
}
return
}
func ( float64) float64 {
const (
= 1 << 52
= 1 << 53
)
if < 0.25 {
return -Sin(Pi * )
}
:= Floor()
var int
if != {
= Mod(, 2)
= int( * 4)
} else {
if >= {
= 0
= 0
} else {
if < {
= +
}
= int(1 & Float64bits())
= float64()
<<= 2
}
}
switch {
case 0:
= Sin(Pi * )
case 1, 2:
= Cos(Pi * (0.5 - ))
case 3, 4:
= Sin(Pi * (1 - ))
case 5, 6:
= -Cos(Pi * ( - 1.5))
default:
= Sin(Pi * ( - 2))
}
return -
}