我不确定double
是否有标准化的代表性,这就是我想问的原因,是否有一种写assert
的好方法可以确保double
中的值{1}}小到足以容纳int64_t
?
更具体地说,int64_t
和double
之间的比较可能超出前者的范围,并且保证是正确的?
答案 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';
}