⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atanll.c

📁 128位长双精度型数字运算包
💻 C
字号:
/*							atanl.c * *	Inverse circular tangent, 128-bit long double precision *      (arctangent) * * * * SYNOPSIS: * * long double x, y, atanl(); * * y = atanl( x ); * * * * DESCRIPTION: * * Returns radian angle between -pi/2 and +pi/2 whose tangent * is x. * * Range reduction is from four intervals into the interval * from zero to  tan( pi/8 ).  The approximant uses a rational * function of degree 3/4 of the form x + x**3 P(x)/Q(x). * * * * ACCURACY: * *                      Relative error: * arithmetic   domain     # trials      peak         rms *    IEEE      -10, 10    100,000      2.6e-34     6.5e-35 * *//*							atan2l() * *	Quadrant correct inverse circular tangent, *	long double precision * * * * SYNOPSIS: * * long double x, y, z, atan2l(); * * z = atan2l( y, x ); * * * * DESCRIPTION: * * Returns radian angle whose tangent is y/x. * Define compile time symbol ANSIC = 1 for ANSI standard, * range -PI < z <= +PI, args (y,x); else ANSIC = 0 for range * 0 to 2PI, args (x,y). * * * * ACCURACY: * *                      Relative error: * arithmetic   domain     # trials      peak         rms *    IEEE      -10, 10    100,000      3.2e-34      5.9e-35 * See atan.c. * *//*							atan.c *//*Cephes Math Library Release 2.2:  December, 1990Copyright 1984, 1990 by Stephen L. MoshierDirect inquiries to 30 Frost Street, Cambridge, MA 02140*/#include "mconf.h"/* arctan(x) = x + x^3 P(x^2) * Theoretical peak relative error = 3.0e-36 * relative peak error spread = 6.6e-8 */static long double P[9] = {-6.635810778635296712545011270011752799963E-4L,-8.768423468036849091777415076702113400070E-1L,-2.548067867495502632615671450650071218995E1L,-2.497759878476618348858065206895055957104E2L,-1.148164399808514330375280133523543970854E3L,-2.792272753241044941703278827346430350236E3L,-3.696264445691821235400930243493001671932E3L,-2.514829758941713674909996882101723647996E3L,-6.880597774405940432145577545328795037141E2L};static long double Q[8] = {/* 1.000000000000000000000000000000000000000E0L, */ 3.566239794444800849656497338030115886153E1L, 4.308348370818927353321556740027020068897E2L, 2.494680540950601626662048893678584497900E3L, 7.928572347062145288093560392463784743935E3L, 1.458510242529987155225086911411015961174E4L, 1.547394317752562611786521896296215170819E4L, 8.782996876218210302516194604424986107121E3L, 2.064179332321782129643673263598686441900E3L};/* tan( 3*pi/8 ) */static long double T3P8 = 2.414213562373095048801688724209698078569672L;/* tan( pi/8 ) */static long double TP8 = 0.414213562373095048801688724209698078569672L;long double atanl(x)long double x;{extern long double PIO2L, PIO4L;long double y, z;long double polevll(), p1evll();short sign;/* make argument positive and save the sign */sign = 1;if( x < 0.0L )	{	sign = -1;	x = -x;	}/* range reduction */if( x > T3P8 )	{	y = PIO2L;	x = -( 1.0L/x );	}else if( x > TP8 )	{	y = PIO4L;	x = (x-1.0L)/(x+1.0L);	}else	y = 0.0L;/* rational form in x**2 */z = x * x;y = y + ( polevll( z, P, 8 ) / p1evll( z, Q, 8 ) ) * z * x + x;if( sign < 0 )	y = -y;return(y);}/*							atan2	*/extern long double PIL, PIO2L;#if ANSIClong double atan2l( y, x )#elselong double atan2l( x, y )#endiflong double x, y;{long double z, w;short code;long double atanl();code = 0;w = 0.0L;if( x < 0.0L )	code = 2;if( y < 0.0L )	code |= 1;if( x == 0.0L )	{	if( code & 1 )		{#if ANSIC		return( -PIO2L );#else		return( 3.0L*PIO2L );#endif		}	if( y == 0.0L )		return( 0.0L );	return( PIO2L );	}if( y == 0.0L )	{	if( code & 2 )		return( PIL );	return( 0.0L );	}switch( code )	{#if ANSIC	case 0:	case 1: w = 0.0L; break;	case 2: w = PIL; break;	case 3: w = -PIL; break;#else	case 0: w = 0.0L; break;	case 1: w = 2.0L * PIL; break;	case 2:	case 3: w = PIL; break;#endif	}z = atanl( y/x );return( w + z );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -