gpt4 book ai didi

c++ - 为什么应用接近 0.0 的指数移动平均线速度较慢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:51 25 4
gpt4 key购买 nike

这是 my code :

#include <math.h> 
#include <iostream>

using namespace std;

inline void Task(double start, double target) {
double a0 = 0.0101252;
double z = start;

double value = -1.0;
double temp = 0.0;
int counter = 0;
while (value != temp) {
temp = value;

// exponential moving average
z += a0 * (target - z);
value = z;

counter++;
}

cout << "start: " << start << " | target: " << target << " | iterations: " << counter << std::endl;
}

int main()
{
Task(0.0, 0.01);
Task(0.01, 0.0);

Task(0.01, 0.02);
Task(0.02, 0.01);
}

正在申请 Exponential Moving Average从 0.1 到 0.2(或从 0.2 到 0.1 或 0.0 到 0.1)导致大约 3100 次迭代:

start: 0 | target: 0.01 | iterations: 3173
start: 0.01 | target: 0.02 | iterations: 3105
start: 0.02 | target: 0.01 | iterations: 3173

相反,如果我转到 0.0,就迭代而言,它的开销大约是 25 倍:

start: 0.01 | target: 0 | iterations: 72305

为什么?这里棘手的部分在哪里?我想不通。非正规化?

最佳答案

double 中可表示的值在零附近更密集。当 value == temp 时,您会中断循环 - 本质上,当您非常接近目标以致于四舍五入时会丢失错误。这实际上意味着当 target 接近于零时,您需要比 target 具有较大绝对值时更高的精度。

您可能希望选择比“尾数的最后一位”更合理的精度目标。

关于c++ - 为什么应用接近 0.0 的指数移动平均线速度较慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48463977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com