C++ 多項式クラスに問題があり、解決策を見つけることができません。
私はこの方法で有理関数を導出しようとしています:
z=dnum.derive();
cout<<"Derive Num: "<<z<<endl;
y=dden.derive();
cout<<"Derive Den: "<<y<<endl;
t=z*dden;
cout<<"NumAdd1: "<<t<<endl;
s=y*dnum;
cout<<"NumAdd2: "<<s<<endl;
dnum=t-s;
cout<<"New NUM: "<<dnum<<endl;
t=dden*dden;
dden=t;
cout<<"New DEN: "<<dden<<endl;
結果は次のとおりです。
Original Num: 3.30688e-05 x^5 +0.000992063 x^4 +0.0138889 x^3 +0.111111 x^2 +0.5 x +1
Original Den: -3.30688e-05 x^5 +0.000992063 x^4 -0.0138889 x^3 +0.111111 x^2 -0.5 x +1
Derive Num: 0.000165344 x^4 +0.00396825 x^3 +0.0416667 x^2 +0.222222 x +0.5
Derive Den: -0.000165344 x^4 +0.00396825 x^3 -0.0416667 x^2 +0.222222 x -0.5
NumAdd1: -5.46772e-09 x^9 +3.28063e-08 x^8 +2.62451e-07 x^7 -2.75573e-06 x^6 -1.65344e-05 x^5 +0.000220459 x^4 +0.000881834 x^3 -0.0138889 x^2 -0.0277778 x +0.5
NumAdd2: -5.46772e-09 x^9 -3.28063e-08 x^8 +2.62451e-07 x^7 +2.75573e-06 x^6 -1.65344e-05 x^5 -0.000220459 x^4 +0.000881834 x^3 +0.0138889 x^2 -0.0277778 x -0.5
New NUM: 6.56127e-08 x^8 -8.13575e-19 x^7 -5.51146e-06 x^6 -2.7349e-17 x^5 +0.000440917 x^4 +4.996e-16 x^3 -0.0277778 x^2 -5.32907e-15 x +1
New DEN: 1.09354e-09 x^10 -6.56127e-08 x^9 +1.90277e-06 x^8 -3.49059e-05 x^7 +0.000446429 x^6 -0.00407848 x^5 +0.0262346 x^4 -0.111111 x^3 +0.25 x^2
導関数の分子は正しいように見えますが、分母はそうではありません。たとえば、「+1」があるはずの場合、2 未満の次数の単項式は存在しないためです。
のオーバーロードに何か問題があると思いましたoperator*
(ただし、分子に対しては機能します)
Polynomial Polynomial::operator*(const Polynomial fact)const {
double *new_coeff;
int degree;
degree = deg + fact.deg;
new_coeff= new double[degree+1];
for(int i=0;i<=degree;i++) new_coeff[i]=0.0;
for(int i=0;i<=deg;i++){
for(int j=0;j<=fact.deg;j++){
if((coeff[i]!=0) && (fact.coeff[j]!=0)){
new_coeff[i+j] += coeff[i]*fact.coeff[j];
}
}
}
return Polynomial(degree,new_coeff);
}
または過負荷でoperator=
Polynomial & Polynomial::operator= ( const Polynomial &poly )
{
if ( this == &poly ) return ( *this );
else{
deg=poly.getdegree();
coeff= new double[deg+1];
for (int i=0; i <= deg; i++)
coeff[i] = poly.coeff[i];
}
return ( *this );
}
何か提案はありますか?
ps 私の質問に何か問題がある場合はご容赦ください... これは私の最初の投稿です。