0

我天真地尝试过

template<typename T>
void foo(T a, T b){
   if(min==max){
      max += std::numeric_limits<T>::epsilon();
   }
   // Do some other stuff
}

但是我发现 epsilon 为整数类型返回 0 而不是 1 这似乎是一个疏忽。如何解决上述问题,包括整数?

4

1 回答 1

2

例如:

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);   
    }
}

如果您没有if constexpr,请改用重载或模板特化。


max += std::numeric_limits<T>::epsilon();

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

于 2020-05-12T16:41:13.000 回答