c++ - 是 static_cast(std::numeric_limits::infinity()) 定义的行为?
问题描述
以下代码(在线here):
#include <iostream>
#include <limits>
int main()
{
double dinf = std::numeric_limits<double>::infinity();
float finf = std::numeric_limits<float>::infinity();
printf("Double infinity = %f, float = %f\n", dinf, finf);
printf("Negative double infinity = %f, float = %f\n", -dinf, -finf);
printf("Double infinity as int = %d, float = %d\n", static_cast<int>(dinf), static_cast<int>(finf));
printf("Double infinity as uint = %d, float = %d\n", static_cast<unsigned int>(dinf), static_cast<unsigned int>(finf));
printf("Negative double infinity as int = %d, float = %d\n", static_cast<int>(-dinf), static_cast<int>(-finf));
printf("Negative double infinity as uint = %d, float = %d\n", static_cast<unsigned int>(-dinf), static_cast<unsigned int>(-finf));
printf("dinf == finf is %s\n", dinf == finf ? "TRUE" : "FALSE");
printf("dinf == -dinf is %s\n", dinf == -dinf ? "TRUE" : "FALSE");
printf("int(dinf) == int(-dinf) is %s\n", static_cast<int>(dinf) == static_cast<int>(-dinf) ? "TRUE" : "FALSE");
return 0;
}
给了我这些结果:
Double infinity = inf, float = inf
Negative double infinity = -inf, float = -inf
Double infinity as int = -2147483648, float = -2147483648
Double infinity as uint = 0, float = 0
Negative double infinity as int = -2147483648, float = -2147483648
Negative double infinity as uint = 0, float = 0
dinf == finf is TRUE
dinf == -dinf is FALSE
int(dinf) == int(-dinf) is TRUE
看着这个页面,它告诉我,std::numeric_limits<int>::infinity()
为什么0
两者static_cast<int>(std::numeric_limits<double>::infinity())
都static_cast<int>(-std::numeric_limits<double>::infinity())
返回INT_MIN
?标准是怎么说的?
解决方案
推荐阅读
- react-native - 在 ViroReact 中转换坐标需要帮助
- bash - 如何在 Google Cloud Build 步骤中使用之前从 bash 脚本文件中删除所有 CR (\r) 字符?
- jestjs - 如何重置 dynamodb 本地数据以进行单元测试
- opengl - openGl中是否有任何功能增加线
- python - matplotlib qt5agg 后端分段错误在使用 pyinstaller 构建可分发后发生
- html - 下拉菜单不会出现在 elementor Wordpress 中
- javascript - 我可以为自定义 Material-ui 主题定义断点特定间距吗?
- c# - 在我的 asp.net 2.2 Web 应用程序中遇到身份用户问题,收到“无效的对象名称 Aspnetusers”错误
- azerothcore - 低级错误的普遍性,以及与 TrinityCore 相比易于开发?
- mysql - MySQL 在 Mac 上看起来不一样?