梯度下降算法

时间:2012-04-11 13:55:33

标签: c++ floating-point double

这是关于梯度下降算法的工作

#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。任何人都可以解释为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

abs仅针对int和long类型定义。对于浮点数,请使用fabs

答案 1 :(得分:1)

powf更改为pow,但我不确定这会解决您的问题。

相关问题