【问题标题】:Finding resolution ranges for lists of floating point numbers查找浮点数列表的分辨率范围
【发布时间】:2017-03-01 11:06:28
【问题描述】:

我有一个样本编号的排序列表,例如:

0.1、0.2、0.4、0.5、0.8、0.9、1.0、1.5、2.0、4.0、4.5、5.0、10.0、15.0、20.0

我需要找到样本的分辨率以及这些分辨率的范围。限制是,一旦您转到较低的分辨率(数字之间的增量较大),您将无法返回。

示例的正确输出应该是:

  1. 从 0.1 到 1.0,分辨率为 0.1
  2. 从 1.0 到 5.0,分辨率为 0.5
  3. 从 5.0 到 20.0,分辨率为 5.0

我尝试检查这些数字并将它们的差异作为分辨率,并在该分辨率成立的情况下扩展范围,但我在处理 0.2 到 0.4 之间的情况时遇到了困难,其中分辨率可能为 0.2,即然后用下一个样本 0.5 失效。

谁能帮我找到一个可以做到这一点的算法? 我使用的是 c++,数字的精度为小数点后 3 位,如果这有什么不同的话。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    您需要找到数组子集中的最小差异。伪代码

    function smallestDifference(input, index)
        min <- -1
        while index + 1 < input.length
            difference = input[index + 1] - input[index]
            if min = -1 or min > difference then
                min <- difference
            end if
            index <- index + 1
        end while
        return min
    end function
    

    该函数将为索引找到输入的分辨率。如果您对最后一个元素执行此操作,将返回 -1,否则返回您需要的确切值。

    像这样测试它:

    i <- 0
    while i < input.length
        print smallestDifference(input, i)
        i <- i + 1
    end while
    

    【讨论】:

    • 问题是找到子集是什么,它们是事先不知道的
    • @EyalK。您可以使用我描述的功能找到子集。您可以使用与我展示的测试方法非常相似的一段时间来识别分辨率变化。如果 minimumDifference(input, i)
    猜你喜欢
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多