在一个更接近零的有限大小的数组中选择float的有效方法是什么?

时间:2012-12-09 13:48:47

标签: c++ math floating-point

对于每个函数,我得到一个有限大小的浮点数,我需要选择它。

所以,如果我有类似

的东西

1)

 {-0.02, 0.5, 0.98, -0.15, etc... }

我会从这个列表中选择“-0.02”。

2)

 {-0.78, 0.003, 0.1, -1.8, etc... }

现在,我会从此列表中选择“0.003”。

这只是一个例子。在我的真实程序中,我有5-6个小数点浮点数。

4 个答案:

答案 0 :(得分:6)

std::min_element有一个带有比较函数对象的重载;这就是我在这里使用的:

float val = *std::min_element(std::begin(v), std::end(v),
    [](float a, float b) { return fabs(a) < fabs(b); } );

答案 1 :(得分:1)

你必须经历阵列上的每个数字,所以最有效的答案将是O(n)。

一旦你知道了这一点,你就会意识到只需浏览每个数字并检查它是否接近零,你所选择的最后一个数字就可以完成交易。

答案 2 :(得分:1)

std::min_element与比较功能一起使用应存档您想要的内容。

template<class T> 
const T& abs_min(const T& a, const T& b)
{
    return (fabs(a) < fabs(b)) ;
}

const SIZE = 5;
float v[SIZE ] {-0.78, 0.003, 0.1, -1.8, 0.8};
float val = *std::min_element(v, v+SIZE , min_abs);

答案 3 :(得分:0)

  • 如果您必须使用数组并且它的大小很小 - 只需像std::min_element那样迭代
  • 如果您可以自由选择订购的容器,请使用std::set<>。然后使用it=std::set::lower_bound(0)并将*it*(it+1)进行比较。对于大数据量,这将更好地扩展