我有一个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
错误是什么?
感谢
答案 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?