Home | History | Annotate | Line # | Download | only in noieee_src
      1 /*	$NetBSD: n_atan.c,v 1.8 2024/06/09 13:35:38 riastradh Exp $	*/
      2 /*
      3  * Copyright (c) 1985, 1993
      4  *	The Regents of the University of California.  All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  * 3. Neither the name of the University nor the names of its contributors
     15  *    may be used to endorse or promote products derived from this software
     16  *    without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     28  * SUCH DAMAGE.
     29  */
     30 
     31 #include <sys/cdefs.h>
     32 __RCSID("$NetBSD: n_atan.c,v 1.8 2024/06/09 13:35:38 riastradh Exp $");
     33 
     34 #ifndef lint
     35 #if 0
     36 static char sccsid[] = "@(#)atan.c	8.1 (Berkeley) 6/4/93";
     37 #endif
     38 #endif /* not lint */
     39 
     40 /* ATAN(X)
     41  * RETURNS ARC TANGENT OF X
     42  * DOUBLE PRECISION (IEEE DOUBLE 53 bits, VAX D FORMAT 56 bits)
     43  * CODED IN C BY K.C. NG, 4/16/85, REVISED ON 6/10/85.
     44  *
     45  * Required kernel function:
     46  *	atan2(y,x)
     47  *
     48  * Method:
     49  *	atan(x) = atan2(x,1.0).
     50  *
     51  * Special case:
     52  *	if x is NaN, return x itself.
     53  *
     54  * Accuracy:
     55  * 1)  If atan2() uses machine PI, then
     56  *
     57  *	atan(x) returns (PI/pi) * (the exact arc tangent of x) nearly rounded;
     58  *	and PI is the exact pi rounded to machine precision (see atan2 for
     59  *      details):
     60  *
     61  *	in decimal:
     62  *		pi = 3.141592653589793 23846264338327 .....
     63  *    53 bits   PI = 3.141592653589793 115997963 ..... ,
     64  *    56 bits   PI = 3.141592653589793 227020265 ..... ,
     65  *
     66  *	in hexadecimal:
     67  *		pi = 3.243F6A8885A308D313198A2E....
     68  *    53 bits   PI = 3.243F6A8885A30  =  2 * 1.921FB54442D18	error=.276ulps
     69  *    56 bits   PI = 3.243F6A8885A308 =  4 * .C90FDAA22168C2    error=.206ulps
     70  *
     71  *	In a test run with more than 200,000 random arguments on a VAX, the
     72  *	maximum observed error in ulps (units in the last place) was
     73  *	0.86 ulps.      (comparing against (PI/pi)*(exact atan(x))).
     74  *
     75  * 2)  If atan2() uses true pi, then
     76  *
     77  *	atan(x) returns the exact atan(x) with error below about 2 ulps.
     78  *
     79  *	In a test run with more than 1,024,000 random arguments on a VAX, the
     80  *	maximum observed error in ulps (units in the last place) was
     81  *	0.85 ulps.
     82  */
     83 
     84 #include "namespace.h"
     85 
     86 #include "mathimpl.h"
     87 
     88 __weak_alias(atan, _atan)
     89 __weak_alias(atanf, _atanf)
     90 
     91 double
     92 atan(double x)
     93 {
     94 	double one=1.0;
     95 	return(atan2(x,one));
     96 }
     97 
     98 float
     99 atanf(float x)
    100 {
    101 	float one=1.0;
    102 	return (float)atan2(x,one);
    103 }
    104 
    105