示例#1
0
文件: complex.c 项目: sunpho84/sunpho
void complex_prodassign(complex a,complex b)
{complex_prod(a,a,b);}
示例#2
0
complex_t *polynomial_eval(polynomial_t *p, complex_t *coef, monomial_t *m, complex_t *eval)
{
	complex_t *result = NULL, *tmp = NULL;
	unsigned long diff = 0;

	if (p == NULL || coef == NULL || eval == NULL)
		return NULL;

	if (p->first->degree == 0)
		return complex_init(coef->re, coef->im);
	else
	{
		diff = (m == NULL) ? p->last->degree : m->previous->degree - m->degree;
		while (diff > 0)
		{
			if (result == NULL)
			{
				result = complex_prod(coef, eval);
				if (result == NULL)
					return NULL;
			}
			else
			{
				tmp = complex_prod(result, eval);
				if (tmp == NULL)
				{
					complex_free(result);

					return NULL;
				}

				complex_free(result);
				result = tmp;
			}

			diff--;
		}

		if (m != NULL)
		{
			tmp = complex_sum(result, m->coef);
			if (tmp == NULL)
			{
				complex_free(result);

				return NULL;
			}

			complex_free(result);
			result = tmp;

			if (m->next != NULL || m->degree > 0)
			{
				result = polynomial_eval(p, tmp, m->next, eval);
				complex_free(tmp);
			}
		}

		return result;
	}
}