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

📄 log.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
/*	@(#)log.c	1.12	*//*LINTLIBRARY*//* *	log returns the natural logarithm of its double-precision argument. *	log10 returns the base-10 logarithm of its double-precision argument. *	Returns EDOM error and value -HUGE if argument <= 0. *	Algorithm and coefficients from Cody and Waite (1980). *	Calls frexp. */#include <math.h>#include <errno.h>#define C1	0.693359375#define C2	-2.121944400546905827679e-4extern double log_error();doublelog(x)register double x;{	static double p[] = {		-0.78956112887491257267e0,		 0.16383943563021534222e2,		-0.64124943423745581147e2,	}, q[] = {		 1.0,		-0.35667977739034646171e2,		 0.31203222091924532844e3,		-0.76949932108494879777e3,	};	register double y;	int n; /* can't be in register because of frexp() below */	if (x <= 0)		return (log_error(x, "log", 3));	y = 1.0;	x = frexp(x, &n);	if (x < M_SQRT1_2) {		n--;		y = 0.5;	}	x = (x - y)/(x + y);	x += x;	y = x * x;	x += x * y * _POLY2(y, p)/_POLY3(y, q);	y = (double)n;	x += y * C2;	return (x + y * C1);}doublelog10(x)register double x;{	return (x > 0 ? log(x) * M_LOG10E : log_error(x, "log10", 5));}static doublelog_error(x, f_name, name_len)double x;char *f_name;unsigned int name_len;{	register char *err_type;	unsigned int mess_len;	struct exception exc;	exc.name = f_name;	exc.retval = -HUGE;	exc.arg1 = x;	if (x) {		exc.type = DOMAIN;		err_type = ": DOMAIN error\n";		mess_len = 15;	} else {		exc.type = SING;		err_type = ": SING error\n";		mess_len = 13;	}	if (!matherr(&exc)) {		(void) write(2, f_name, name_len);		(void) write(2, err_type, mess_len);		errno = EDOM;	}	return (exc.retval);}

⌨️ 快捷键说明

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