Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;对于整数和浮点数?_C++_C++11_Numbers_Numeric Limits - Fatal编程技术网

C++ 如何在C++;对于整数和浮点数?

C++ 如何在C++;对于整数和浮点数?,c++,c++11,numbers,numeric-limits,C++,C++11,Numbers,Numeric Limits,我天真地尝试了 template<typename T> void foo(T a, T b){ if(min==max){ max += std::numeric_limits<T>::epsilon(); } // Do some other stuff } 模板 无效foo(T a,T b){ 如果(最小值==最大值){ max+=std::numeric_limits::epsilon(); } //做些别的事情 } 然而,我发现

我天真地尝试了

template<typename T>
void foo(T a, T b){
   if(min==max){
      max += std::numeric_limits<T>::epsilon();
   }
   // Do some other stuff
}
模板
无效foo(T a,T b){
如果(最小值==最大值){
max+=std::numeric_limits::epsilon();
}
//做些别的事情
}
然而,我发现epsilon对整数类型返回0,而不是1,这似乎是一个疏忽。如何解决上述包括整数的问题?

例如:

template<typename T>
T next(T v) {
    if constexpr (std::is_integral_v<T>) {
        return v + 1;
    } else {
        return std::nextafter(v, std::numeric_limits<T>::infinity);   
    }
}
对于许多浮点值,
v+epsilon==v
。对于许多其他值,它将跳过相邻值。

例如:

template<typename T>
T next(T v) {
    if constexpr (std::is_integral_v<T>) {
        return v + 1;
    } else {
        return std::nextafter(v, std::numeric_limits<T>::infinity);   
    }
}

对于许多浮点值,
v+epsilon==v
。对于许多其他值,它将跳过相邻值。

对于整数
max
下一个较大的值是
max+1
。执行此操作之前,请检查
max
是否已经是可表示的最大值。对于整数
max
,下一个较大的值是
max+1
。在执行此操作之前,请检查
max
是否已经是可表示的最大值。如果抱歉,C++11没有constexpr!!虽然这是一个很好的答案,但C++11没有constexpr,如果我很抱歉的话!!虽然这是一个很好的答案