不知道我在哪里出错,而且必须在我的polyEvaluate函数中,但是任何帮助都会受到赞赏。问题出在最后的计算中。我尝试修改功能,但似乎无法解决问题。
select p.id, p.postname, p.userid as 'created_by', s.user_id as 'shared_by'
from post p left outer join share s on p.id = s.postid
where p.userid = 10
order by p.id;
答案 0 :(得分:3)
评估多项式的函数是复杂的。多项式的数学表示可能如下所示:
f(x) = ∑ c[i]∙xⁱ
没有必要使常量成为特殊情况,它是c[0]∙x⁰
。该公式用C表示为:
double polyEvaluate(double coeff[], int order, double x)
{
double res = 0.0;
for (int i = 0; i <= order; i++) {
res += coeff[i] * pow(x, i);
}
return res;
}
这个简单的代码要求系数的索引指的是指数,这是评估函数的更自然的表示。如果您希望用户首先输入具有大指数的系数,我认为这应该在输入期间处理一次。
(你反向辅助数组polyExp
,但这并不是真正需要的;当你对术语求和时,用order - i
访问系数就足够了。但是,最好选择一个在代码中代表您的代码的表示。使用当前代码,您可以创建一个辅助数组并将其反转为每个评估。)
你可以在没有pow
函数的情况下评估多项式,因此没有数学库,只需计算x
的幂:
double polyEvaluate(double coeff[], int order, double x)
{
double fact = 1.0;
double res = 0.0;
int i;
for (i = 0; i <= order; i++) {
res += coeff[i] * fact;
fact *= x;
}
return res;
}
答案 1 :(得分:1)
您的主要问题可能是您定义为长度order + 1
的可变长度数组,而order
在该时间点没有分配值。
我建议暂时坚持使用固定长度的数组(只需将它们放得足够长)。