2012-04-11 116 views
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; 
} 

上面的代碼給我從雙非正確的轉換浮動,可能丟失數據的警告,因此,其結果是它給了我一些未定義的值,如-1.IND。任何人都可以解釋爲什麼這是?

回答

2

abs僅針對int和long類型定義。對於浮點數使用fabs

1

更改powfpow雖然我不確定這會解決您的問題。

+0

我發現錯誤,而不是 - ,我有+所以這是問題,謝謝 – 2012-04-11 13:57:51