C++,非常出乎意料-1#INF
C++, very unexpected -1#INF
我正在调试优化例程。我生成一个日志文本文件,在优化例程的每次迭代中跟踪目标函数值。
上下文如下:我处理一个曲线拟合问题,该问题的模型在四参数中是线性的,在X数据中是多项式
Y = PARAM1*X^3+PARAM2*X^2+PARAM3*X+PARAM4
并对该模型生成的无噪声无偏数据运行优化程序,以测试算法。
在日志文件中,第一个优化步骤显示没有问题。函数求值具有双重值。在每次迭代中,计算5个函数值(并显示在日志文件中)。从给定的迭代开始,情况就变糟了:一个函数的求值变成了-1#INF
,尽管目标函数在这一点上已经成功求值了(!)。在接下来的迭代中,"坏点"将继续以-1#INF
进行评估,其他点也将逐个以-1#INF进行评估。考虑到公式和之前正确评估的事实,在这些点上计算Y并不困难。
此外,我怀疑还有另一个原因,比如内存管理。你对此有什么想法吗,或者有什么建议可以更密切地跟踪问题吗?
编辑
我在日志文件中看到第一个-1#INF
。函数在每次迭代中在5个点进行求值,但这5个点中只有一个是"新点"。当-1#INF
首次出现时,此时功能已经成功评估。
看起来像
ITERATION N-1
f1 559.011
f2 560.034
f3 562.034
f4 560.342
f5 560.344
ITERATION N
f1 -1#INF
f2 560.034
f3 558.034
f4 560.342
f5 560.344
其中,在ITERATION N
处,只有f3
是在新点处的函数评估,并且f1是在与ITERATION N-1
中的f1相同的点处的功能评估。
无穷大在计算中传播。最大的可能性是多项式产生-Inf,因为X已经是-Inf了。最大的可能性是,这是由X除以零的计算引起的。返回并添加用于检查除法中是否为零的代码。
相关文章:
- 如何检查 log2 'inbuilt c++ function'是否返回 '-inf'?
- 是否可以将"inf"分配给变量,例如 c++ 中的常规数值
- 编写二进制数字时出乎意料的结果[C ]
- 在泰勒展开中获取 inf 对于 e^x,但仅适用于小误差边界
- 出乎意料的堆损坏在功能中发生在异常处理中
- 获取从函数返回'-inf'
- 调整OpenCV Mat向量向量的大小时出乎意料的结果
- 通过搜索下一个字符来出乎意料的行为
- 当调用std :: thread.detach时出乎意料的行为
- 计算百分比 C++ 时产生的 inf%
- Fuse文件系统查找/Trash、/autorun.inf和/.xdg卷信息文件
- Poco::P ath 使用 const wchar_t* 进行编译,但行为出乎意料
- 为什么当我尝试计算平均绝对偏差时,我的程序返回 inf
- c++ std 的 inf 的行为是否与常识无穷大完全一样
- 使用关键字继承构造函数时出乎意料的行为
- 出乎意料的差执行时间,用于字符串串联函数
- 什么是 gdb 中的 inf
- INF输出计算线斜率
- Blas产品DGEMM具有CBLASTRANS选项出乎意料的行为
- C++,非常出乎意料-1#INF