给定一个数字,如何在一系列浮点数据中找到最接近的数字

时间:2015-05-13 19:32:04

标签: algorithm floating-point-precision

我在寻找亚马逊的面试问题时想到了这个问题。

给定一个数字,如何在一系列浮点数据中找到最接近的数字?

如果一切都是整数,则answer减去数组中每个数字的数字,然后在数组中查找具有最小绝对值的元素。

但是当谈到浮点时,它应该是高度非暴力的。

Ani的想法?感谢。

1 个答案:

答案 0 :(得分:4)

浮点数的问题是舍入错误。但是,浮点数的比较不受舍入误差的影响:因此,您可以在线性时间内正确地找到比x更大且更小的数字:

sm = -inf;
bg = inf;
for(i from 0 to n)
  if(arr[i] > x && arr[i] < bg)
    bg = arr[i];
  if(arr[i] < x && arr[i] > sm)
    sm = arr[i];

现在您只需要确定这两个数字中的哪一个更接近x。由于bg较大且sm较小,因此唯一可能出现舍入错误的时间是bg >> xx >> sm;在这两种情况中,它只会增加舍入差异的大小。

(如果幅度相同,例如x=1arr=[1e100, -1e100],则可以知道x更接近于与自身具有相同符号的值。)