[X86向ARM迁移问题] double数计算出现了精度问题
收藏回复举报
[X86向ARM迁移问题] double数计算出现了精度问题
t('forum.solved') 已解决
发表于2023-12-22 18:02:51
0 查看

问题:

  • 我需要极高精度的double数计算,目前希望arm double计算与x86 平台执行相同的运算得到相同的结果。因为我需要迭代运算,后面迭代依赖前面的结果。迭代次数多了以后,最终算出来的结果与x86相比diff过大,无法达到预期结果。

期望解决方案:希望提供解决思路,谢谢!我想到了用bisheng-3.1进行尝试


本地测试环境:

  • ARM:
    1. CPU: Kunpeng920
    2. 编译器:gcc-4.8.4
    3. 操作系统:openEuler release 20.03 (LTS)
  • X86:
    1. CPU: Intel Xeon Gold 6265 CPU 3.60GHz
    2. 编译器:gcc-4.8.4
    3. 操作系统:CentOS 6.7

测试代码:

#include <stdio.h>
#include <math.h>

int main()
{
    double dVal = 20;
    double szVal = 0.3;
    for (int i = 0; i != 64; ++i)
    {
        dVal += 1.0 / dVal;
        szVal *= 1.11;
        
        if (i == 3 || i == 9 || i == 15) // 本地这三个数有diff
        {
            printf("dVal=%.40e    \n    cbrt(dVal)=%.40e\n", dVal, cbrt(dVal));
            printf("\n");
        }
        
        return 0;
    }
}

本地测试结果 true

我要发帖子