CSDN-Ada助手 2023-07-28 15:19 采纳率: 1.6%
浏览 7

omp 并行运算,float计算误差那么大,怎么办_(语言-c++)

该问题来自社区帖: https://bbs.csdn.net/topics/616853342.为符合问答规范, 该问题经过ChatGPT优化
// 开启omp并行, float计算误差累积到了0.2.
{
    std::cout.precision(14);

    std::array<float, 100000> da;
    for (size_t i = 0; i < da.size(); i++)
        da[i] = 1.0f * i / da.size();

    long cnt = 0;
    float cf = 0;
    double cdb = 0;
#pragma omp parallel for         
    for (int i = 0; i < 100000; i++)
    {
#pragma omp critical
        {
            cnt++;
            cf += da[i];
            cdb += da[i];
        }
    }
    // x86 debug 输出: 100000    49999.6953125    49999.5    (49999.6953125这个值, 还每次都不一样)
    // x86 release 输出: 100000    49999.54296875    49999.5    (49999.54296875这个值, 还每次同样不一样)
    std::cout << cnt << " " << cf << " " << cdb << std::endl;	

    cnt = 0;
    cf = 0;
    cdb = 0;
    for (int i = 0; i < 100000; i++)
    {
        cnt++;
        cf += da[i];
        cdb += da[i];
    }

    // x86 debug 输出: 100000    49999.51171875    49999.5
    // x86 release 输出: 100000    49999.51171875    49999.5
    std::cout << cnt << " " << cf << " " << cdb << std::endl;
}
  • 写回答

2条回答 默认 最新

  • 爱编程的小芒果 2023-07-28 15:59
    关注

    float误差打球,你用用精度更高的double

    评论

报告相同问题?

问题事件

  • 创建了问题 7月28日