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?

questionAnswers(3)

yourAnswerToTheQuestion