the art of computer programming 中的多项式除法

plus_plus 2003-02-03 05:38:31
第二卷4.6.1 Algorithm D 影印本 421页
下面是我按这个算法用C 写的.得到的商是对的, 但是余数不对, 谁能帮我看下错哪了?
p1是被除数, p2是除数, q是商, r是余数.我算的r值不对

typedef struct poly {
int deg;
double coeffs[MAX_DEG+1];
} Poly;

void polyDivide( const Poly *p1, const Poly *p2, Poly *q, Poly *r)
{
int k;
int j;
Poly p;

polyCopy(p1, &p);
q->deg = p1->deg - p2->deg;
for (k = q->deg, j = p2->deg + k - 1; k >= 0; k--, j--) {
q->coeffs[k] = p.coeffs[p2->deg+k] / p2->coeffs[p2->deg];
p.coeffs[j] = p.coeffs[j] - q->coeffs[k] * p2->coeffs[j-k];
p.deg--;
}
*r = p;
}
...全文
47 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
plus_plus 2003-02-04
  • 打赏
  • 举报
回复
搞定

/*
polyDivide: Divides p1(z) by p2(z),
setting the quotient q(z) and the remainder r(z) so that
p1(z) = p2(z) * q(z) + r(z) and 0 <= r->deg < p2->deg.
Precondition: p2->deg > 0.
*/
void polyDivide( const Poly *p1, const Poly *p2, Poly *q, Poly *r)
{
/* From Donald E.knuth, "The Art of Computer Programming", *
* Volume 2, 4.6.1, Algorithm D */
int k;
int j;
Poly p;

/* Copy p1 to p */
polyCopy(p1, &p);

/* Quotient's degree equals to the original *
* polynomial's degree minus the divisor's degree */
q->deg = p1->deg - p2->deg;

/* Polynomial long division */
for (k = q->deg, j = p2->deg + k - 1; k >= 0; k--) {
q->coeffs[k] = p.coeffs[(p2->deg)+k] / p2->coeffs[p2->deg];

for (j = p2->deg + k -1; j >= k; j--) {
p.coeffs[j] = p.coeffs[j] - q->coeffs[k] * p2->coeffs[j-k];
}
p.deg--;
}
/* Copy p to the remainder */
polyCopy(&p, r);
}

qhgary 2003-02-03
  • 打赏
  • 举报
回复
算法是什么?
注释呢?这样的程序在网上,谁有时间看啊?
plus_plus 2003-02-03
  • 打赏
  • 举报
回复
up

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧