对相同的总和(C语言)的不同结果(舍入问题)

问题描述 投票:0回答:1

嗯,我正在尝试使用两种不同的方法对向量求和。结果应该相同,但是不会发生。

[方法1:矢量以线性方式求和;

方法2:将向量分为两部分;

下面显示代码:

#include <stdio.h>
#include <stdlib.h>

int main(void){
    int i,n;
    double a,b,c;
    a=0;
    b=0;
    c=0;
    n=1000000;

//Initialization
    double vec[n];
    for(i=0;i<n;i++)
    {
        vec[i]=1.0001;
    }

//Sum Method 1
    for(i=0;i<n;i++)
    {
        a+=vec[i];
    }

//Sum Method 2
    for(i=0;i<n/2;i++)
    {
        b+=vec[i];
    }
    for(i=n/2;i<n;i++)
    {
        c+=vec[i];
    }
    b=c+b;

    //------------------------------------ 
    printf("Method 1: %.30f\n",a);
    printf("Method 2: %.30f\n",b);
    return 0;
}

输出为:

Method 1: 1000099.999976676190271973609924316406
Method 2: 1000100.000003988854587078094482421875

有什么办法解决这个问题?

c vector sum double
1个回答
0
投票

浮点加法没有关联。在第一个中,您加起来像:(((x1 + x2)+ x3)+ x4)。在第二个类似(x1 + x2)+(x3 + x4)中。

© www.soinside.com 2019 - 2024. All rights reserved.