diff options
Diffstat (limited to 'src/pkg/math/atanh.go')
-rw-r--r-- | src/pkg/math/atanh.go | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/src/pkg/math/atanh.go b/src/pkg/math/atanh.go deleted file mode 100644 index 113d5c103..000000000 --- a/src/pkg/math/atanh.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package math - -// The original C code, the long comment, and the constants -// below are from FreeBSD's /usr/src/lib/msun/src/e_atanh.c -// and came with this notice. The go code is a simplified -// version of the original C. -// -// ==================================================== -// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. -// -// Developed at SunPro, a Sun Microsystems, Inc. business. -// Permission to use, copy, modify, and distribute this -// software is freely granted, provided that this notice -// is preserved. -// ==================================================== -// -// -// __ieee754_atanh(x) -// Method : -// 1. Reduce x to positive by atanh(-x) = -atanh(x) -// 2. For x>=0.5 -// 1 2x x -// atanh(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------) -// 2 1 - x 1 - x -// -// For x<0.5 -// atanh(x) = 0.5*log1p(2x+2x*x/(1-x)) -// -// Special cases: -// atanh(x) is NaN if |x| > 1 with signal; -// atanh(NaN) is that NaN with no signal; -// atanh(+-1) is +-INF with signal. -// - -// Atanh returns the inverse hyperbolic tangent of x. -// -// Special cases are: -// Atanh(1) = +Inf -// Atanh(±0) = ±0 -// Atanh(-1) = -Inf -// Atanh(x) = NaN if x < -1 or x > 1 -// Atanh(NaN) = NaN -func Atanh(x float64) float64 { - const NearZero = 1.0 / (1 << 28) // 2**-28 - // special cases - switch { - case x < -1 || x > 1 || IsNaN(x): - return NaN() - case x == 1: - return Inf(1) - case x == -1: - return Inf(-1) - } - sign := false - if x < 0 { - x = -x - sign = true - } - var temp float64 - switch { - case x < NearZero: - temp = x - case x < 0.5: - temp = x + x - temp = 0.5 * Log1p(temp+temp*x/(1-x)) - default: - temp = 0.5 * Log1p((x+x)/(1-x)) - } - if sign { - temp = -temp - } - return temp -} |