2016-07-14 2 views
0

doubleが標準化された表現を持っているかどうかはわかりませんが、私が尋ねたかった理由はありませんか?assertを書く良い方法はありますか? doubleint64_tに収まるのに十分小さいですか?は、doubleがintに収まると主張します

より具体的には、int64_tdoubleの間の比較は、よく定義され、正しいことが保証されている範囲外である可能性がありますか?このような

+0

[関連博士ドブス物品(http://www.drdobbs.com/cpp/comparing-an-integer-with-a-floating-poi/240150323) – jaggedSpire

答えて

5

何かが働くだろう:

assert(std::numeric_limit<int64_t>::min() <= value 
     && value <= std::numeric_limits<int64_t>:::max() 
+0

が 'double'間の比較でありますそれは 'int64_t'と' int64_t'の定義よりも大きくなるでしょうか? – Curious

+0

@Curiousさらに 'static_cast'を紹介します。実際にはすべて定義されています。 –

+0

しかし、 'int64_t'と' double'の間のキャストが精度を失うことはなく、その後間違った結果につながることは保証されていますか? – Curious

0

あなたはタイプの制限をチェックしてみてくださいすることができます。

#include <iostream> 
#include <climits> 
#include <cassert> 

using namespace std; 

int main() 
{ 
    double val = static_cast<double>(LONG_MAX); // or LONG_MIN 

    assert((static_cast<long int>(val) > LONG_MIN) && (static_cast<long int>(val) < LONG_MAX)); 
    cout << static_cast<long int>(val) << '\n'; 
} 
関連する問題