algorithm - 将双舍入到算术级数的最近成员?

标签 algorithm math language-agnostic sequence intervals

我有一个 double 序列的公式 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。

最佳答案

假设 c 是您序列中的一个数字。然后你有 n = (c - a)/d。 因为你想要一个整数 <= c,所以取 n = floor((c - a)/d)。 然后你可以将 c 舍入为:a + d * floor((c - a)/d)

假设 k = 3 + 5 * n 并且您舍入 c=21。

并且 3 + 5 * floor((21 - 3)/5) = 3 + 5 * 3 = 18

关于algorithm - 将双舍入到算术级数的最近成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691053/

相关文章:

javascript 树结构 - 遍历树结构并显示子项内计数属性的总和

algorithm - 马桶座算法

algorithm - 如何将多项式变换到另一个坐标系?

c - 用C编写一个程序,输出大于或等于n且所有数字都是偶数的最小自然数

java - 度数计算不正确,哪里出错了?

algorithm - "Waiting lists problem"

java - 使用位数组和位掩码检查时间范围

arrays - 1维排序数组: KD-Tree vs Binary Search

algorithm - 炮弹与墙壁和目标的碰撞检测

c++ - 如何从中心找到旋转矩形的顶点?