我需要將一個數字範圍劃分爲一些長度相同的段。但我無法決定哪種方式更準確。例如:哪種方式更準確?
double r1 = 100.0, r2 = 1000.0, r = r2 - r1;
int n = 30;
double[] position = new double[n];
for (int i = 0; i < n; i++)
{
position[i] = r1 + (double)i/n * r;
// position[i] = r1 + i * r/n;
}
這是關於(double)int1/int2 * double
或int1 * double/int2
。哪種方法更準確?我應該使用哪種方式?
更新
下面的代碼將顯示差:
double r1 = 1000.0, r2 = 100000.0, r = r2 - r1;
int n = 300;
double[] position = new double[n];
for (int i = 0; i < n; i++)
{
double v1 = r1 + (double)i/n * r;
double v2 = position[i] = r1 + i * r/n;
if (v1 != v2)
{
Console.WriteLine(v2 - v1);
}
}
在我看來,它應該是平等的。你爲什麼不嘗試一下,看看有什麼區別? –
這是一個很好的問題。我相信會有區別,它依賴於域(double,int1和int2的範圍)。這裏的關鍵詞是丟失有效數字。 – amit
@amit你能回答我的問題嗎?我可以接受嗎? – EFanZh