首页 > 解决方案 > 是 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?标准是怎么说的?

标签: c++language-lawyerinfinity

解决方案


推荐阅读