Poiché std:ceil
non è constexpr
né in Visual Studio 2015, sto cercando un'implementazione constexpr
che posso utilizzare in fase di compilazione, con scarso successo.Ricerca di una funzione constexprceil
Qualsiasi aiuto è apprezzato.
Poiché std:ceil
non è constexpr
né in Visual Studio 2015, sto cercando un'implementazione constexpr
che posso utilizzare in fase di compilazione, con scarso successo.Ricerca di una funzione constexprceil
Qualsiasi aiuto è apprezzato.
Dal momento che il compilatore di Visual Studio 2015 ancora non consente una funzione constexpr avere if
condizionali e variabili, ho riscritto la soluzione di Jarod42 e li eliminato:
constexpr int32_t ceil(float num)
{
return (static_cast<float>(static_cast<int32_t>(num)) == num)
? static_cast<int32_t>(num)
: static_cast<int32_t>(num) + ((num > 0) ? 1 : 0);
}
È possibile utilizzare
constexpr std::int32_t ceil(float num) {
std::int32_t inum = static_cast<std::int32_t>(num);
if (num == static_cast<float>(inum)) {
return inum;
}
return inum + (num > 0 ? 1 : 0);
}
Nota: Non funziona una volta un intero non può rappresentare un valore float.
Sede [Ceil: come possiamo implementare noi stessi?] (http://stackoverflow.com/a/8378022/369872) sembra che potrebbe essere scritto per essere constexpr – David