断言双精度可以适合整数
assert that a double can fit into an int
我不太确定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';
}
相关文章:
- 我可以信任表示整数的浮点或双精度来保持精度吗
- C 字符串返回字符串的整数/双精度/长整型值
- 如何防止双精度值到整数的隐式转换
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 为什么输出是整数而不是双精度?
- 从字符串转换为双精度和整数 - C++
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- C++,遇到将双精度转换为整数的问题
- 用双精度除以整数
- 使用整数初始化列表初始化长双精度的向量
- 如何判断 c++ 向量中的值类型(整数或双精度)?
- 了解双精度转换与整数转换中的整数与截断关系
- 为什么使用 int64_t 会产生错误的结果,而双精度则按预期进行简单的整数乘法
- 将双精度与整数进行比较
- 64 位整数到双精度冲突
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- 不确定输出双精度或整数的代码行
- 将 32 位浮点数和不强制转换的 32 位整数与双精度进行比较,当其中一个值可能太大而无法完全适合另一种类型时
- 使用 sprintf 格式化负整数/双精度
- 在c++中是否有一种方法可以将这种格式的输入限制为整数/双精度