gpt4 book ai didi

c - 相同的代码+二进制在不同的机器上给出不同的结果

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:31 24 4
gpt4 key购买 nike

<分区>

我遇到了一个我无法解决的问题。以下是一些演示问题的玩具 C 代码:

for(int i = 0; i < 10000; i++)
{
float theta = 2*PI*i/N;
double s1 = sin(theta);
double c1 = cos(theta);

float s3 = s1;
float c3 = c1;

float s2 = sin(theta);
float c2 = cos(theta);

printf("theta - %f, (s1:%f, c1:%f) (s2:%f c2:%f) (s3:%f c3:%f) diff (s3-s2:%.8f c3-c2:%.8f)\n", theta, s1, c1, s2, c2, s3, c3, s3-s2, c3-c2);
}

我用 gcc 编译了这个,我在两台机器上运行相同的二进制文件(都有 Intel 处理器,但型号不同)。由于它是相同的二进制文件,我曾期望得到相同的结果,但事实并非如此:

例如,在机器 #1 上,这是输出之一:

theta - 2.441646, (s1:0.644177, c1:-0.764876) (s2:0.644177 c2:-0.764876) (s3:0.644177 c3:-0.764876) 
diff (s3-s2:0.00000006 c3-c2:-0.00000006)

在机器 #2 上:

theta - 2.441646, (s1:0.644177, c1:-0.764876) (s2:0.644177 c2:-0.764876) (s3:0.644177 c3:-0.764876) 
diff (s3-s2:0.00000000 c3-c2:0.00000000)

我有两个问题:

  • 在机器 #1 上,为什么 s2/s3 和 c2/c3 不匹配?
  • 更重要的是(对于我的应用程序,我需要这两台机器产生相同的结果,而当它们用于其他表达式中时,这种精度差异会导致更大的差异),为什么机器之间的结果是一致的?它是相同的二进制文件,那么是处理器造成了差异吗?其他一些数学库?

我想要一些解释来指引我正确的方向,谢谢~

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