]> Cypherpunks repositories - gostls13.git/commitdiff
math: speed up Gamma(+Inf)
authorMohit Agarwal <mohit@sdf.org>
Tue, 18 Oct 2016 08:30:30 +0000 (14:00 +0530)
committerRobert Griesemer <gri@golang.org>
Tue, 18 Oct 2016 22:12:03 +0000 (22:12 +0000)
Add special case for Gamma(+∞) which speeds it up:

benchmark            old ns/op     new ns/op     delta
BenchmarkGamma-4     14.5          7.44          -48.69%

The documentation for math.Gamma already specifies it as a special
case:

        Gamma(+Inf) = +Inf

The original C code that has been used as the reference implementation
(as mentioned in the comments in gamma.go) also treats Gamma(+∞) as a
special case:

if( x == INFINITY )
        return(x);

Change-Id: Idac36e19192b440475aec0796faa2d2c7f8abe0b
Reviewed-on: https://go-review.googlesource.com/31370
Reviewed-by: Robert Griesemer <gri@golang.org>
src/math/gamma.go

index 514260be05b3a5848c10829673332da7f27f9527..cc9e869496b114a2bbc6c20ba7d1010d4e0f0d68 100644 (file)
@@ -133,6 +133,8 @@ func Gamma(x float64) float64 {
        switch {
        case isNegInt(x) || IsInf(x, -1) || IsNaN(x):
                return NaN()
+       case IsInf(x, 1):
+               return Inf(1)
        case x == 0:
                if Signbit(x) {
                        return Inf(-1)