相同的操作但不同的答案(R和C#)

时间:2011-05-24 16:05:52

标签: c# r

我有一个R脚本进行一些计算。

我在C#中找到了相同的脚本,但是它给了我不同于R的答案。

the R code is :

    count=16569
    for(ind1 in seq(1,count,by=1000))
        {
        for(ind2 in seq(1,count,by=1000))
     {

        value=(count*(ind1^2)) + ((count*(count+1)*((2*count)+1))/6) -(2*ind1*((count*(count+1))/2)) + (2*count*ind1*(count-ind2+1)) + ((count-ind2+1)*(count^2)) + (2*count*(ind2-count-1)*(ind2+count))

    }

}

和C#代码是:

 double count=16569
        for(int ind1=1;ind1<=count;ind1+=1000)
            {
            for(int ind2=1;ind2<=count;ind2+=1000)
         {

            value=(count*(Math.Pow(ind1,2))) + ((count*(count+1)*((2*count)+1))/6) -(2*ind1*((count*(count+1))/2)) + (2*count*ind1*(count-ind2+1)) + ((count-ind2+1)*(Math.Pow(count,2))) + (2*count*(ind2-count-1)*(ind2+count))

        }

    }
for the first round , the value in R is : -3032615095125
but the value in C# is : 4548002182315

错误是什么?

感谢

3 个答案:

答案 0 :(得分:2)

查看您的代码,我发现循环不会有任何区别。永远不会存储或访问循环的上一次迭代中的值,因此value将始终由循环的最后一次运行设置。

实际上,您只有三个常量:count = 16569 ind1 = 16001 ind2 = 16001

答案是1.209314e + 12,无论循环是否运行。

在C#中(一旦我为value添加分号和变量声明,它就会运行): 1209314008875

所以我在R和C#中得到了相同的答案。我知道你问为什么答案有所不同,但你可能会先看看代码是否正在做你想做的事情;我不知道为什么循环在那里。使用您提供的代码,您可以插入上面的常量来验证您的机器给您的是什么。

答案 1 :(得分:1)

我不知道R,但就C#而言,变量value的数据类型是什么?这可能是价值溢出,因此垃圾?

答案 2 :(得分:0)

检查变量的位大小。 R中的值看起来很可疑。

另外,为什么计数加倍而不是int?