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

📄 func.c

📁 Calc Software Package for Number Calc
💻 C
📖 第 1 页 / 共 5 页
字号:
	NUMBER *q;	COMPLEX *c;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	eps = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_EXP1);		eps = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			q = qexp(vals[0]->v_num, eps);			if (q == NULL)				return error_value(E_EXP3);			result.v_num = q;			result.v_type = V_NUM;			break;		case V_COM:			c = c_exp(vals[0]->v_com, eps);			if (c == NULL)				return error_value(E_EXP3);			result.v_com = c;			result.v_type = V_COM;			if (cisreal(c)) {				result.v_num = qlink(c->real);				result.v_type = V_NUM;				comfree(c);			}			break;		default:			return error_value(E_EXP2);	}	return result;}static VALUEf_ln(int count, VALUE **vals){	VALUE result;	COMPLEX ctmp, *c;	NUMBER *err;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM)			return error_value(E_LN1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			if (!qisneg(vals[0]->v_num) && !qiszero(vals[0]->v_num)) {				result.v_num = qln(vals[0]->v_num, err);				result.v_type = V_NUM;				return result;			}			ctmp.real = vals[0]->v_num;			ctmp.imag = qlink(&_qzero_);			ctmp.links = 1;			c = c_ln(&ctmp, err);			break;		case V_COM:			c = c_ln(vals[0]->v_com, err);			break;		default:			return error_value(E_LN2);	}	result.v_type = V_COM;	result.v_com = c;	if (cisreal(c)) {		result.v_num = qlink(c->real);		result.v_type = V_NUM;		comfree(c);	}	return result;}static VALUEf_log(int count, VALUE **vals){	VALUE result;	COMPLEX ctmp, *c;	NUMBER *err;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM)			return error_value(E_LOG1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			if (!qisneg(vals[0]->v_num) && !qiszero(vals[0]->v_num)) {				result.v_num = qlog(vals[0]->v_num, err);				result.v_type = V_NUM;				return result;			}			ctmp.real = vals[0]->v_num;			ctmp.imag = qlink(&_qzero_);			ctmp.links = 1;			c = c_log(&ctmp, err);			break;		case V_COM:			c = c_log(vals[0]->v_com, err);			break;		default:			return error_value(E_LOG2);	}	result.v_type = V_COM;	result.v_com = c;	if (cisreal(c)) {		result.v_num = qlink(c->real);		result.v_type = V_NUM;		comfree(c);	}	return result;}static VALUEf_cos(int count, VALUE **vals){	VALUE result;	COMPLEX *c;	NUMBER *eps;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	eps = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_COS1);		eps = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			result.v_num = qcos(vals[0]->v_num, eps);			result.v_type = V_NUM;			break;		case V_COM:			c = c_cos(vals[0]->v_com, eps);			if (c == NULL)				return error_value(E_COS3);			result.v_com = c;			result.v_type = V_COM;			if (cisreal(c)) {				result.v_num = qlink(c->real);				result.v_type = V_NUM;				comfree(c);			}			break;		default:			return error_value(E_COS2);	}	return result;}static VALUEf_sin(int count, VALUE **vals){	VALUE result;	COMPLEX *c;	NUMBER *eps;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	eps = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_SIN1);		eps = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			result.v_num = qsin(vals[0]->v_num, eps);			result.v_type = V_NUM;			break;		case V_COM:			c = c_sin(vals[0]->v_com, eps);			if (c == NULL)				return error_value(E_SIN3);			result.v_com = c;			result.v_type = V_COM;			if (cisreal(c)) {				result.v_num = qlink(c->real);				result.v_type = V_NUM;				comfree(c);			}			break;		default:			return error_value(E_SIN2);	}	return result;}static VALUEf_tan(int count, VALUE **vals){	VALUE result;	VALUE tmp1, tmp2;	NUMBER *err;	/* initialize VALUEs */	result.v_subtype = V_NOSUBTYPE;	tmp1.v_subtype = V_NOSUBTYPE;	tmp2.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_TAN1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			result.v_num = qtan(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp1.v_type = V_COM;			tmp1.v_com = c_sin(vals[0]->v_com, err);			tmp2.v_type = V_COM;			tmp2.v_com = c_cos(vals[0]->v_com, err);			divvalue(&tmp1, &tmp2, &result);			comfree(tmp1.v_com);			comfree(tmp2.v_com);			break;		default:			return error_value(E_TAN2);	}	return result;}static VALUEf_sec(int count, VALUE **vals){	VALUE result;	VALUE tmp;	NUMBER *err;	/* initialize VALUEs */	result.v_subtype = V_NOSUBTYPE;	tmp.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_SEC1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			result.v_num = qsec(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp.v_type = V_COM;			tmp.v_com = c_cos(vals[0]->v_com, err);			invertvalue(&tmp, &result);			comfree(tmp.v_com);			break;		default:			return error_value(E_SEC2);	}	return result;}static VALUEf_cot(int count, VALUE **vals){	VALUE result;	VALUE tmp1, tmp2;	NUMBER *err;	/* initialize VALUEs */	result.v_subtype = V_NOSUBTYPE;	tmp1.v_subtype = V_NOSUBTYPE;	tmp2.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_COT1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			if (qiszero(vals[0]->v_num))				return error_value(E_1OVER0);			result.v_num = qcot(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp1.v_type = V_COM;			tmp1.v_com = c_cos(vals[0]->v_com, err);			tmp2.v_type = V_COM;			tmp2.v_com = c_sin(vals[0]->v_com, err);			divvalue(&tmp1, &tmp2, &result);			comfree(tmp1.v_com);			comfree(tmp2.v_com);			break;		default:			return error_value(E_COT2);	}	return result;}static VALUEf_csc(int count, VALUE **vals){	VALUE result;	VALUE tmp;	NUMBER *err;	/* initialize VALUEs */	result.v_subtype = V_NOSUBTYPE;	tmp.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_CSC1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			if (qiszero(vals[0]->v_num))				return error_value(E_1OVER0);			result.v_num = qcsc(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp.v_type = V_COM;			tmp.v_com = c_sin(vals[0]->v_com, err);			invertvalue(&tmp, &result);			comfree(tmp.v_com);			break;		default:			return error_value(E_CSC2);	}	return result;}static VALUEf_sinh(int count, VALUE **vals){	VALUE result;	NUMBER *eps;	NUMBER *q;	COMPLEX *c;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	eps = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_SINH1);		eps = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			q = qsinh(vals[0]->v_num, eps);			if (q == NULL)				return error_value(E_SINH3);			result.v_num = q;			result.v_type = V_NUM;			break;		case V_COM:			c = c_sinh(vals[0]->v_com, eps);			if (c == NULL)				return error_value(E_SINH3);			result.v_com = c;			result.v_type = V_COM;			if (cisreal(c)) {				result.v_num = qlink(c->real);				comfree(c);				result.v_type = V_NUM;			}			break;		default:			return error_value(E_SINH2);	}	return result;}static VALUEf_cosh(int count, VALUE **vals){	VALUE result;	NUMBER *eps;	NUMBER *q;	COMPLEX *c;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	eps = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_COSH1);		eps = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			q = qcosh(vals[0]->v_num, eps);			if (q == NULL)				return error_value(E_COSH3);			result.v_num = q;			result.v_type = V_NUM;			break;		case V_COM:			c = c_cosh(vals[0]->v_com, eps);			if (c == NULL)				return error_value(E_COSH3);			result.v_com = c;			result.v_type = V_COM;			if (cisreal(c)) {				result.v_num = qlink(c->real);				comfree(c);				result.v_type = V_NUM;			}			break;		default:			return error_value(E_COSH2);	}	return result;}static VALUEf_tanh(int count, VALUE **vals){	VALUE result;	VALUE tmp1, tmp2;	NUMBER *err;	/* initialize VALUEs */	result.v_subtype = V_NOSUBTYPE;	tmp1.v_subtype = V_NOSUBTYPE;	tmp2.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_TANH1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			result.v_num = qtanh(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp1.v_type = V_COM;			tmp1.v_com = c_sinh(vals[0]->v_com, err);			tmp2.v_type = V_COM;			tmp2.v_com = c_cosh(vals[0]->v_com, err);			divvalue(&tmp1, &tmp2, &result);			comfree(tmp1.v_com);			comfree(tmp2.v_com);			break;		default:			return error_value(E_TANH2);	}	return result;}static VALUEf_coth(int count, VALUE **vals){	VALUE result;	VALUE tmp1, tmp2;	NUMBER *err;	/* initialize VALUEs */	result.v_subtype = V_NOSUBTYPE;	tmp1.v_subtype = V_NOSUBTYPE;	tmp2.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_COTH1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			if (qiszero(vals[0]->v_num))				return error_value(E_1OVER0);			result.v_num = qcoth(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp1.v_type = V_COM;			tmp1.v_com = c_cosh(vals[0]->v_com, err);			tmp2.v_type = V_COM;			tmp2.v_com = c_sinh(vals[0]->v_com, err);			divvalue(&tmp1, &tmp2, &result);			comfree(tmp1.v_com);			comfree(tmp2.v_com);			break;		default:			return error_value(E_COTH2);	}	return result;}static VALUEf_sech(int count, VALUE **vals){	VALUE result;	VALUE tmp;	NUMBER *err;	/* initialize VALUEs */	result.v_subtype = V_NOSUBTYPE;	tmp.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_SECH1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			result.v_num = qsech(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp.v_type = V_COM;			tmp.v_com = c_cosh(vals[0]->v_com, err);			invertvalue(&tmp, &result);			comfree(tmp.v_com);			break;		default:			return error_value(E_SECH2);	}	return result;}static VALUEf_csch(int count, VALUE **vals){	VALUE result;	VALUE tmp;	NUMBER *err;	/* initialize VALUEs */	result.v_subtype = V_NOSUBTYPE;	tmp.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_CSCH1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			if (qiszero(vals[0]->v_num))				return error_value(E_1OVER0);			result.v_num = qcsch(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp.v_type = V_COM;			tmp.v_com = c_sinh(vals[0]->v_com, err);			invertvalue(&tmp, &result);			comfree(tmp.v_com);			break;		default:			return error_value(E_CSCH2);	}	return result;}static VALUEf_atan(int count, VALUE **vals){	VALUE result;	COMPLEX *tmp;	NUMBER *err;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_ATAN1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			result.v_num = qatan(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp = c_atan(vals[0]->v_com, err);			if (tmp == NULL)				return error_value(E_LOGINF);			result.v_type = V_COM;			result.v_com = tmp;			if (cisreal(tmp)) {				result.v_num = qlink(tmp->real);				result.v_type = V_NUM;				comfree(tmp);			}			break;		default:			return error_value(E_ATAN2);	}	return result;}static VALUEf_acot(int count, VALUE **vals){	VALUE result;	COMPLEX *tmp;	NUMBER *err;	/* initialize VALUE */	result.v_subtype = V_NOSUBTYPE;	err = conf->epsilon;	if (count == 2) {		if (vals[1]->v_type != V_NUM || qiszero(vals[1]->v_num))			return error_value(E_ACOT1);		err = vals[1]->v_num;	}	switch (vals[0]->v_type) {		case V_NUM:			result.v_num = qacot(vals[0]->v_num, err);			result.v_type = V_NUM;			break;		case V_COM:			tmp = c_acot(vals[0]->v_com, err);			if (tmp == NULL)				return error_value(E_LOGINF);			result.v_type = V_COM;			result.v_com = tmp;			if (cisreal(tmp)) {				result.v_num = qlink(tmp->real);

⌨️ 快捷键说明

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