1

これが勾配降下アルゴリズムに関する私の作品です

#include<iostream>
#include<math.h>
#include<float.h>
using namespace std;
double f_prime(double x)
{

    return (double)(4.0*powf(x,3)-9.0*powf(x,2));


}
void gradient()
{
    double x_old=0;
    double x_new=6;
    double eps=0.01;
    double precision=0.00001;
    while(abs(x_new-x_old)>precision)

    {
        x_old=x_new;
    x_new=x_old-eps*f_prime(x_old);


    }
    cout<<" local minimum at : "<<x_new<<endl;

}
int main()
    {

        gradient();



        return 0;
}

上記のコードは、 double から float への不適切な変換、データの損失の可能性についての警告を表示します。その結果、 のような未定義の値が返されます-1.IND。これがなぜなのか説明できる人はいますか?

4

2 に答える 2

2

absint 型と long 型に対してのみ定義されています。浮動小数点数の場合はfabs.

于 2012-04-11T13:59:20.533 に答える
1

問題が解決するかどうかはわかりませんが、に変更powfしてください。pow

于 2012-04-11T13:56:46.900 に答える