4

関数ごとに、選択する必要がある浮動小数点数の有限サイズの配列を取得します。

だから私が何かを持っているなら

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

4 に答える 4

6

std::min_element比較関数オブジェクトを取るオーバーロードがあります。それが私がここで使用するものです:

float val = *std::min_element(std::begin(v), std::end(v),
    [](float a, float b) { return fabs(a) < fabs(b); } );
于 2012-12-09T14:04:09.577 に答える
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);
于 2012-12-09T14:30:21.890 に答える
1

とにかく配列のすべての数値を調べる必要があるため、最も効率的な答えは O(n) になります。

これがわかれば、各数字を調べて、最後に選択した数字がゼロに近いかどうかを確認するだけで取引が成立することがわかります。

于 2012-12-09T13:52:52.737 に答える
0
  • 配列を使用する必要があり、サイズが小さい場合-単に次のように繰り返しますstd::min_element
  • 注文したコンテナを自由に選択できる場合は、std::set<>. を使用it=std::set::lower_bound(0)して比較*it*(it+1)ます。これは、大きなデータサイズに対してより適切にスケーリングします
于 2012-12-09T14:09:22.760 に答える