27 lines
480 B
Go
27 lines
480 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"math/big"
|
|
)
|
|
|
|
func lfactorial(n float64) float64 {
|
|
l, _ := math.Lgamma(n + 1)
|
|
return l
|
|
}
|
|
|
|
func factorial(n float64) *big.Float {
|
|
i, frac := math.Modf(lfactorial(n) * math.Log2E)
|
|
z := big.NewFloat(math.Exp2(frac))
|
|
return z.SetMantExp(z, int(i))
|
|
}
|
|
|
|
func main() {
|
|
for i := 0.; i <= 10; i++ {
|
|
fmt.Println(i, factorial(i))
|
|
}
|
|
fmt.Println(100, factorial(100))
|
|
fmt.Println(800, factorial(800))
|
|
}
|