加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 此循环中的先前值是多少?

发布时间:2020-12-16 07:32:55 所属栏目:百科 来源:网络整理
导读:这是我的代码的一部分.其余的只是函数定义.我有一个20 x 20的数组记录板的温度.我需要通过一个循环重复,直到数组中的单元格没有变化超过0.1度(我每次迭代刷新值)你如何监视数组中任何单元格的最大变化,以确定何时停止迭代?现在我已经尝试过这个,但输出不正
这是我的代码的一部分.其余的只是函数定义.我有一个20 x 20的数组记录板的温度.我需要通过一个循环重复,直到数组中的单元格没有变化超过0.1度(我每次迭代刷新值)你如何监视数组中任何单元格的最大变化,以确定何时停止迭代?现在我已经尝试过这个,但输出不正确.我相信这是因为我错误地定义了我之前的那个来比较当前的那个.

while (true)
{
    bool update = false;
    for (int a = 1; a < array_size -1; a++)
    {
        for (int b = 1; b < array_size -1; b++)
        {             
            hot_plate[a][b] = sum_cell(hot_plate,a,b);

        }
    } 

    for (int a = 1; a < array_size-1; a++)
    {
        for (int b = 1; b < array_size-1; b++)
        {
            hot_plate_next[a][b]=sum_cell(hot_plate_next,b);
            if (abs(hot_plate_next[a][b] - hot_plate[a][b]) > 0.1)
            {
                update = true;
            }
            hot_plate_next[a][b] = hot_plate[a][b];
            cout << hot_plate[a][b] << " ";
        }  
    }

    if (!update) {
        break;
    }
}

解决方法

问题是当单元格的更改较小时,您会覆盖更新.在这种情况下,任何具有较小更改的单元格都将停止迭代.

像这样构造你的循环:

float largest_change = 0.0f;
do {
    largest_change = 0.0f;

    for (...) {
        float new_value = ...
        float change = abs(new_value - hot_plate[a][b]);
        if (change > largest_change)
            largest_change = change;
        hot_plate[a][b] = change;
    }
} while (largestChange > 0.1f);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读