我有一個雙數字序列的公式k = a + d * n
,其中a和d是常數double值,n是整數,k> = 0,a> = 0。例如:將雙精度舍入到最接近的算術級數?
..., 300,301.6,303.2,304.8,306.4,...
我想將給定數字c
四捨五入到最接近的值,該值低於c
。
目前我使用這樣的事:
double someFunc(double c) {
static double a = 1;
static double d = 2;
int n = 0;
double a1 = a;
if (c >= a) {
while (a1 < c) {
a1 += d;
}
a1 -= d;
} else {
while (a1 > c) {
a1 -= d;
}
}
return a1;
}
是否有可能做同樣沒有這些可怕的循環?我問,因爲下面的情況可能出現:
abs(a - c) >> abs(d)
(第一個數字是更然後第二個等大量重複的可能)
My question is similar to the following one.但在我的情況下,我也有一個a
變量,它具有影響最終結果。這意味着序列可能沒有編號0.
使用一些數學和計算'地板((CA)/ d)',這將給你的近似於'n'。然後計算'a + d * n'。我會給你留下這些煩瑣的容忍和f-p問題。 – 2014-11-01 16:05:16
您可以將序列放入一個數組中,並使用[this this]之類的二進制搜索算法(http://www.java2s.com/Code/Java/Collections-Data-Structure/找到值最接近值htm的元素)來快速找到元素(索引)您正在尋找。我認爲最小複雜度將保持「O(n)」。 – 2014-11-01 16:05:37