我有一个非常基本和简单的问题,但我在理解这个C代码时遇到了问题。
#define POLYNOMIAL(x) \
(((((3.0 * (x) + 2.0) * (x) - 5.0) * (x) - 1.0) * (x) + 7.0) * (x) - 6.0)
该定义适用于此多项式:3x 5 + 2x 4 -5x 3 -x 2 + 7X-6
如何将此多项式转换为#define
中显示的格式?对此有什么诀窍吗?
答案 0 :(得分:4)
你的多项式:
3x 5 + 2x 4 - 5x 3 - x 2 + 7x - 6
可以连续重写:
(3x 4 + 2x 3 - 5x 2 - x + 7)·x - 6
((3x 3 + 2x 2 - 5x - 1)·x + 7)·x - 6
(((3x 2 + 2x - 5)·x - 1)·x + 7)·x - 6
((((3x + 2)·x - 5)·x - 1)·x + 7)·x - 6
这是一个扩展的,或展开的,Horner的Method循环。如果系数表示为数组:
double polynomial[] = { -6, 7, -1, -5, 2, 3 };
然后,可以使用此函数评估多项式:
double horners (double poly[], int terms, double x) {
double result = 0;
while (terms--) {
result = result * x + poly[terms];
}
return result;
}
答案 1 :(得分:1)
只需添加括号并减少内部功率,直到到达最后一个,如下所示:
(3x^5)+(2x^4)-(5x^3)-(x^2)+7x-6
((3x^4)+(2x^3)-(5x^2)-x+7)x-6
(((3x^3)+(2x^2)-5x-1)x+7)x-6
((((3x^2)+2x-5)x-1)x+7)x-6
((((3x+2)x-5)x-1)x+7)x-6