0

私は持っている状況にいますがstd::vector<double>、それらのダブルのいくつかを「何もない」/「存在しない」にしたいです。これはC++でどのように行われますか? すべての "通常の" double は、私の目的のために負ではないと安全に想定できます。

-1 (または負の値) は「何もない」ことを示す必要がありますか? それはあまりエレガントに聞こえません。

"何もない" bool メンバーを持つ Double クラスを作成する必要がありますか? それはうまくいくかもしれませんが、かなり長くて醜いようです。

Double クラスを作成し、"NoDouble : public Double" サブクラスを作成する必要がありますか? それはさらに悪いように聞こえます。

どんなアイデアでも大歓迎です。

4

3 に答える 3

5

IEEE 浮動小数点演算がある場合はstd::numeric_limits<double>::quiet_NaN()、「何もない」値として使用します。d「何もない」かどうかを確認するには、 を使用しますisnan(d)。また、 NaNd != dの場合のみ true です。dNaN の問題は、ゼロをゼロで除算したり、負の数から平方根をとったりするような不完全な計算を行うときに発生する可能性があることです。NaN を使用した計算は、NaN も使用します。

ブーストを使用する場合はboost::optional<double>、NaN の側に他のレベルの非可用性を追加することを使用できます。次に、無効な番号と欠落した番号の 2 つの悪い状態があります。Boostには便利なライブラリがたくさん含まれているので、とにかく価値のあるツールです。

「何もない」理由についていくつかの考えられる理由を添付する必要がある場合は、二重の代わりに特別なフォールブルクラスを使用してください。Fallible は、高く評価されている「Scientific and Engineering C++」の本の著者である Barnton と Nackman によって発明されました。

負の数は存在しない可能性があると述べました。そのような場合は、double をクラスにラップします。あなたが持っているのは技術的に通常のダブルではないので、クラスはそれに制限を加えることができます.

于 2013-02-19T23:53:00.157 に答える
1

を使用できますstd::vector<double *>。NULL ポインターは、空のスロットまたは値を示します。

于 2013-02-19T23:55:48.150 に答える