関数ごとに、選択する必要がある浮動小数点数の有限サイズの配列を取得します。
だから私が何かを持っているなら
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 桁の浮動小数点数があります。
関数ごとに、選択する必要がある浮動小数点数の有限サイズの配列を取得します。
だから私が何かを持っているなら
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 桁の浮動小数点数があります。
std::min_element
比較関数オブジェクトを取るオーバーロードがあります。それが私がここで使用するものです:
float val = *std::min_element(std::begin(v), std::end(v),
[](float a, float b) { return fabs(a) < fabs(b); } );
比較関数で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);
とにかく配列のすべての数値を調べる必要があるため、最も効率的な答えは O(n) になります。
これがわかれば、各数字を調べて、最後に選択した数字がゼロに近いかどうかを確認するだけで取引が成立することがわかります。
std::min_element
std::set<>
. を使用it=std::set::lower_bound(0)
して比較*it
し*(it+1)
ます。これは、大きなデータサイズに対してより適切にスケーリングします