断言双精度可以适合整数

assert that a double can fit into an int

本文关键字:整数 双精度 断言      更新时间:2023-10-16

我不太确定double是否具有标准化表示形式,这就是为什么我想问,有没有一种好方法来编写一个assert,以确保double中的值足够小以适合int64_t

更具体地说,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';
}