xref: /titanic_41/usr/src/lib/libm/common/LD/atanhl.c (revision a9d3dcd5820128b4f34bf38f447e47aa95c004e8)
15b2ba9d3SPiotr Jasiukajtis /*
25b2ba9d3SPiotr Jasiukajtis  * CDDL HEADER START
35b2ba9d3SPiotr Jasiukajtis  *
45b2ba9d3SPiotr Jasiukajtis  * The contents of this file are subject to the terms of the
55b2ba9d3SPiotr Jasiukajtis  * Common Development and Distribution License (the "License").
65b2ba9d3SPiotr Jasiukajtis  * You may not use this file except in compliance with the License.
75b2ba9d3SPiotr Jasiukajtis  *
85b2ba9d3SPiotr Jasiukajtis  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95b2ba9d3SPiotr Jasiukajtis  * or http://www.opensolaris.org/os/licensing.
105b2ba9d3SPiotr Jasiukajtis  * See the License for the specific language governing permissions
115b2ba9d3SPiotr Jasiukajtis  * and limitations under the License.
125b2ba9d3SPiotr Jasiukajtis  *
135b2ba9d3SPiotr Jasiukajtis  * When distributing Covered Code, include this CDDL HEADER in each
145b2ba9d3SPiotr Jasiukajtis  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155b2ba9d3SPiotr Jasiukajtis  * If applicable, add the following below this CDDL HEADER, with the
165b2ba9d3SPiotr Jasiukajtis  * fields enclosed by brackets "[]" replaced with your own identifying
175b2ba9d3SPiotr Jasiukajtis  * information: Portions Copyright [yyyy] [name of copyright owner]
185b2ba9d3SPiotr Jasiukajtis  *
195b2ba9d3SPiotr Jasiukajtis  * CDDL HEADER END
205b2ba9d3SPiotr Jasiukajtis  */
215b2ba9d3SPiotr Jasiukajtis 
225b2ba9d3SPiotr Jasiukajtis /*
235b2ba9d3SPiotr Jasiukajtis  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
245b2ba9d3SPiotr Jasiukajtis  */
255b2ba9d3SPiotr Jasiukajtis /*
265b2ba9d3SPiotr Jasiukajtis  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
275b2ba9d3SPiotr Jasiukajtis  * Use is subject to license terms.
285b2ba9d3SPiotr Jasiukajtis  */
295b2ba9d3SPiotr Jasiukajtis 
30*a9d3dcd5SRichard Lowe #pragma weak __atanhl = atanhl
315b2ba9d3SPiotr Jasiukajtis 
325b2ba9d3SPiotr Jasiukajtis #include "libm.h"
335b2ba9d3SPiotr Jasiukajtis 
345b2ba9d3SPiotr Jasiukajtis #define GENERIC	long double
355b2ba9d3SPiotr Jasiukajtis #define	ATANH 	atanhl
365b2ba9d3SPiotr Jasiukajtis 
375b2ba9d3SPiotr Jasiukajtis /* ATANH(x)
385b2ba9d3SPiotr Jasiukajtis  *                  1              2x                          x
395b2ba9d3SPiotr Jasiukajtis  *	ATANH(x) = --- * LOG(1 + -------) = 0.5 * LOG1P(2 * --------)
405b2ba9d3SPiotr Jasiukajtis  *                  2             1 - x                      1 - x
415b2ba9d3SPiotr Jasiukajtis  * Note: to guarantee ATANH(-x) = -ATANH(x), we use
425b2ba9d3SPiotr Jasiukajtis  *                 sign(x)             |x|
435b2ba9d3SPiotr Jasiukajtis  *	ATANH(x) = ------- * LOG1P(2*-------).
445b2ba9d3SPiotr Jasiukajtis  *                    2              1 - |x|
455b2ba9d3SPiotr Jasiukajtis  *
465b2ba9d3SPiotr Jasiukajtis  * Special cases:
475b2ba9d3SPiotr Jasiukajtis  *	ATANH(x) is NaN if |x| > 1 with signal;
485b2ba9d3SPiotr Jasiukajtis  *	ATANH(NaN) is that NaN with no signal;
495b2ba9d3SPiotr Jasiukajtis  *	ATANH(+-1) is +-INF with signal.
505b2ba9d3SPiotr Jasiukajtis  *
515b2ba9d3SPiotr Jasiukajtis  */
525b2ba9d3SPiotr Jasiukajtis 
535b2ba9d3SPiotr Jasiukajtis #define	FABS 	fabsl
545b2ba9d3SPiotr Jasiukajtis #define	LOG1P 	log1pl
555b2ba9d3SPiotr Jasiukajtis #define	COPYSIGN 	copysignl
565b2ba9d3SPiotr Jasiukajtis 
575b2ba9d3SPiotr Jasiukajtis 
585b2ba9d3SPiotr Jasiukajtis extern GENERIC 	FABS(),LOG1P(),COPYSIGN();
595b2ba9d3SPiotr Jasiukajtis 
605b2ba9d3SPiotr Jasiukajtis static GENERIC
615b2ba9d3SPiotr Jasiukajtis zero	= (GENERIC) 0.0,
625b2ba9d3SPiotr Jasiukajtis half 	= (GENERIC) 0.5,
635b2ba9d3SPiotr Jasiukajtis one	= (GENERIC) 1.0;
645b2ba9d3SPiotr Jasiukajtis 
ATANH(x)655b2ba9d3SPiotr Jasiukajtis GENERIC ATANH(x)
665b2ba9d3SPiotr Jasiukajtis GENERIC x;
675b2ba9d3SPiotr Jasiukajtis {
685b2ba9d3SPiotr Jasiukajtis 	GENERIC t;
695b2ba9d3SPiotr Jasiukajtis 	t = FABS(x);
705b2ba9d3SPiotr Jasiukajtis 	if (t == one) return x/zero;
715b2ba9d3SPiotr Jasiukajtis 	t = t/(one-t);
725b2ba9d3SPiotr Jasiukajtis 	return COPYSIGN(half,x)*LOG1P(t+t);
735b2ba9d3SPiotr Jasiukajtis }
74