std:: isnan
| 
           定义于头文件
            
            
             <cmath>
            
            | ||
| (1) | ||
| 
           
           
           
            
             bool
            
            isnan
            
             (
            
            
             float
            
            num
            
             )
            
            
             ;
            
             
             
              bool
             
             isnan
             
              (
             
             
              double
             
             num
             
              )
             
             
              ;
             
              | (C++11 起) (C++23 前) | |
| 
           
            
             constexpr
            
            
             bool
            
            isnan
            
             (
            
            
             /*浮点类型*/
            
            num
            
             )
            
            
             ;
            
           
           | (C++23 起) | |
| 
           
            SIMD 重载
           
           
            (C++26 起)
           
           | ||
| 
           定义于头文件
            
            
             <simd>
            
            | ||
| 
           
            
             template
            
            
             <
            
            
             /*数学浮点类型*/
            
            V
            
             >
            
             
             
              constexpr
             
             
              typename
             
             
              /*推导出的 SIMD 类型*/
             
             
              <
             
             V
             
              >
             
             
              ::
             
             
              mask_type
             
              | (S) | (C++26 起) | 
| 
           定义于头文件
            
            
             <cmath>
            
            | ||
| 
           
            
             template
            
            
             <
            
            
             class
            
            Integer
            
             >
            
             bool isnan ( Integer num ) ; | (A) | (C++11 起) (C++23 起为 constexpr) | 
| 
          
           S)
          
          SIMD 重载对
          
           
            v_num
           
          
          执行逐元素的
           
           std::isnan
          操作。
 | (since C++26) | 
| 目录 | 
参数
| num | - | 浮点数或整数值 | 
| v_num | - | 数据并行对象,其特化为 std::basic_simd ,且其元素类型为浮点类型 | 
返回值
         [
        
        
         
          
          
           0
          
          
         
        
        
         ,
        
        
         
          v_num.
          
           size
          
          
           (
          
          
           )
          
         
        
        
         )
        
       
       内的所有
       
        
         i
        
       
       。
      注释
存在许多具有不同符号位和有效载荷的不同 NaN 值,请参阅 std::nan 和 std::numeric_limits::quiet_NaN 。
NaN 值永远不会与自身或其他 NaN 值比较相等。根据 IEEE-754 标准,复制 NaN 不要求保留其位表示形式(符号和 有效载荷 ),但大多数实现会保留。
另一种检测浮点值是否为 NaN 的方法是与自身进行比较: bool is_nan ( double x ) { return x ! = x ; } 。
       
        GCC
       
       和
       
        Clang
       
       支持
       
        -ffinite-math
       
       选项(该选项也被
       
        -ffast-math
       
       隐含启用),该选项允许相应编译器假定不存在特殊的 IEEE-754 浮点数值,例如 NaN、无穷大或负零。换言之,在此选项下,
       
        std::isnan
       
       被假定为总是返回
       
        
         
          false
         
        
       
       。
      
额外的重载不需要完全按照 (A) 提供。只需确保对于整数类型的实参 num , std :: isnan ( num ) 与 std :: isnan ( static_cast < double > ( num ) ) 具有相同效果即可。
示例
#include <cfloat> #include <cmath> #include <iostream> int main() { std::cout << std::boolalpha << "isnan(NaN) = " << std::isnan(NAN) << '\n' << "isnan(Inf) = " << std::isnan(INFINITY) << '\n' << "isnan(0.0) = " << std::isnan(0.0) << '\n' << "isnan(DBL_MIN/2.0) = " << std::isnan(DBL_MIN / 2.0) << '\n' << "isnan(0.0 / 0.0) = " << std::isnan(0.0 / 0.0) << '\n' << "isnan(Inf - Inf) = " << std::isnan(INFINITY - INFINITY) << '\n'; }
输出:
isnan(NaN) = true isnan(Inf) = false isnan(0.0) = false isnan(DBL_MIN/2.0) = false isnan(0.0 / 0.0) = true isnan(Inf - Inf) = true
参阅
| 
           
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
            
             
              (C++11)
             
            
           
           | 非数值(NaN) (函数) | 
| 
           
            
             
              (C++11)
             
            
           
           | 对给定浮点值进行分类 (函数) | 
| 
           
            
             
              (C++11)
             
            
           
           | 检查给定数值是否为有限值 (函数) | 
| 
           
            
             
              (C++11)
             
            
           
           | 检查给定数值是否为无穷大 (函数) | 
| 
           
            
             
              (C++11)
             
            
           
           | 检查给定数值是否正规 (函数) | 
| 
           
            
             
              (C++11)
             
            
           
           | 检查两个浮点值是否无序 (函数) | 
| 
          
           
            C 文档
           
          
          用于
          
           
            isnan
           
          
          | |