c++ - 梯度下降算法

标签 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。谁能解释这是为什么?

最佳答案

abs 仅为 int 和 long 类型定义。对于 float ,请使用 fabs

关于c++ - 梯度下降算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10107406/

相关文章:

c++ - 如何在 C++ 中正确规范化浮点值?

c++ - 具有动态功能集的 Qt 应用程序

c++ - 等同于 MFC 窗口的 OnFinalMessage?

python - 为什么我的程序在执行看似无限循环时会停止?

objective-c - 浮点比较的最大绝对误差是多少?

php - 删除表1和表2关联的记录

c++ - Boost flat_map 容器

c++ - COLORREF 和 D2D1::ColorF 之间的转换

floating-point - 在什么范围内,整数算术加法和减法可以精确到 IEEE double 浮点中的整数?

C 语言 : convert 3 char string ("123") to %. 2f (1.23)