Melhor maneira de verificar se um ponto flutuante é um número inteiro
[Existem algumas perguntas sobre isso, mas nenhuma das respostas é particularmente definitiva e várias estão desatualizadas com o padrão C ++ atual].
Minha pesquisa mostra que estes são os principais métodos usados para verificar se um valor de ponto flutuante pode ser convertido em um tipo integralT
.
if (f >= std::numeric_limits<T>::min() && f <= std::numeric_limits<T>::max() && f == (T)f))
usandostd::fmod
para extrair o restante e testar a igualdade para 0.
usandostd::remainder
e teste a igualdade para 0.
O primeiro teste assume que um elenco def
para umT
instância é definida. Não é verdade parastd::int64_t
parafloat
, por exemplo.
Com o C ++ 11, qual é o melhor? Existe uma maneira melhor?