我天真地尝试过
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 这似乎是一个疏忽。如何解决上述问题,包括整数?
我天真地尝试过
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 这似乎是一个疏忽。如何解决上述问题,包括整数?
例如:
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
. 对于许多其他值,它将跳过邻居。