C++では、タイプの例は、のタイプがT
で、整数型または浮動小数点型にすることができます。私は、があるT
の最大番号y
を探したいと思います。整数と浮動小数点数の両方で透過的に動作するように、ソリューションをテンプレート化する必要があります。 x
が既にT
で表すことができる最小の数である場合の端点の場合を無視することができます。最大の数<x?
使用可能なケース:この質問にはローカライズされているとマークされていますので、もっと一般的だと思うユースケースを提供したいと思います。私はOPの元の著者ではないことに注意してください。
は、この構造を考えてみましょう:
struct lower_bound {
lower_bound(double value, bool open) : value(open? value+0.1 : value) {}
double value;
bool operator()(double x) { return x >= value; }
};
このクラスは、開または閉のいずれかであることができるその下限をシミュレートします。もちろん、本物の(いたずらを意図した)人生では、これを行うことはできません。 Sはすべて実数で計算するのは不可能です(少なくともかなりトリッキーです)。
しかし、Sたちは本質的可算集合を扱っているので、これは、非常に有効な原則で、浮動小数点数の集合であるとき。開いているか閉じているかのようなものはありません。つまり、> =はlower_boundクラスで行われたように定義することができます。
コードを簡単にするために、開いた下限をシミュレートするために+0.1を使用しました。もちろん、0.1は、浮動小数点表記で値< z < =値+0.1または値+0.1 ==となるような値zが存在する可能性があるため、粗値である。 sizeof(LOWER_BOUND)が大きくなり、オペレータ()ニーズとしてしかし、これはあまり効率的である
struct lower_bound {
lower_bound(double value, bool open) : open(open), value(value) {}
bool open;
double value;
bool operator()(double x) { return (open ? x > value : x>=value); }
};
:ブレット・ヘイル答えは非常に便利です@ :)
したがって、あなたは別の簡単な解決策を考えることより複雑なステートメントを実行します。最初の実装は本当に効率的で、構造の代わりに単純なdoubleとして実装することもできます。技術的には、2番目の実装を使用する唯一の理由は、doubleが連続していると仮定しているのに対し、そうでないと仮定しているためです。
有効なユースケースを作成して説明し、元の著者に怒られていないことを願っています。あなたがC++ 11を持っている場合は
を、あなたは、これは浮動小数点型のためにどのようになるかの例を与えることができますか?それは、yの仮数が1ビット小さく、指数が同じであることを意味しますか? – angelatlarge
私は27.5kユーザー以上を期待しています。 –
何か試しましたか? – Rapptz