double
が標準化された表現を持っているかどうかはわかりませんが、私が尋ねたかった理由はありませんか?assert
を書く良い方法はありますか? double
はint64_t
に収まるのに十分小さいですか?は、doubleがintに収まると主張します
より具体的には、int64_t
とdouble
の間の比較は、よく定義され、正しいことが保証されている範囲外である可能性がありますか?このような
double
が標準化された表現を持っているかどうかはわかりませんが、私が尋ねたかった理由はありませんか?assert
を書く良い方法はありますか? double
はint64_t
に収まるのに十分小さいですか?は、doubleがintに収まると主張します
より具体的には、int64_t
とdouble
の間の比較は、よく定義され、正しいことが保証されている範囲外である可能性がありますか?このような
何かが働くだろう:
assert(std::numeric_limit<int64_t>::min() <= value
&& value <= std::numeric_limits<int64_t>:::max()
あなたはタイプの制限をチェックしてみてくださいすることができます。
#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';
}
[関連博士ドブス物品(http://www.drdobbs.com/cpp/comparing-an-integer-with-a-floating-poi/240150323) – jaggedSpire