这是我在梯度下降算法上的工作
#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;
}上面的代码警告我从双精度型到浮点型的转换不正确,可能会丢失数据,因此它给了我一些未定义的值,比如-1.IND。有人能解释一下为什么会这样吗?
发布于 2012-04-11 21:59:21
abs仅为int和long类型定义。对于浮点数,请使用fabs。
发布于 2012-04-11 21:56:47
将powf更改为pow,尽管我不确定这是否能解决您的问题。
https://stackoverflow.com/questions/10107406
复制相似问题