我遇到了一个我无法弄清楚的问题。以下是一些展示问题的玩具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)
我有两个问题:
我希望得到一些解释,指出我正确的方向,谢谢〜
答案 0 :(得分:0)
有几个因素会影响上述结果,例如
因此。理论上,如果它们是相同的,结果应该是相同的......