断言double可以适合int

时间:2016-07-14 20:44:10

标签: c++ c++11 int double overflow

我不确定double是否有标准化的代表性,这就是我想问的原因,是否有一种写assert的好方法可以确保double中的值{1}}小到足以容纳int64_t

更具体地说,int64_tdouble之间的比较可能超出前者的范围,并且保证是正确的?

2 个答案:

答案 0 :(得分:5)

这样的事情会起作用:

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

答案 1 :(得分: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';
}