You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

添加精度参数eps后C语言梯度计算函数输出全零的问题排查

问题分析与修复

你的修改版代码存在几个关键错误,直接导致输出异常(全零),咱们一步步拆解问题并修正:

1. 函数参数的语法错误

首先看grad函数的参数列表:

void grad(double* y, double* x, int n, double d, double eps; double (*f)(double*, int))

这里double eps;用了分号,这是C语言语法错误!函数参数之间必须用逗号分隔,正确写法应该是:

void grad(double* y, double* x, int n, double d, double eps, double (*f)(double*, int))

这个错误会直接导致编译失败,如果你能运行起来,大概率是代码粘贴时的笔误,但这是第一个必须修正的点。

2. 核心逻辑错误:未重新计算f1就更新步长d

这是导致输出全零的关键问题:
在你的do-while循环里,你只把d不断除以10,但从来没有重新计算对应新步长的f1。第一次计算f1是基于初始的d,之后d变小,但`x[i]

火山引擎 最新活动