Básicamente quiero buscar el valor más pequeño (positivo) de un grupo de valores y necesito un valor predeterminado para compararlo con el primero. La suposición ingenua sería, ellos siempre comparan "menos que" (excepto NaN, pero no los consideremos) pero no estoy seguro.¿Cómo se comparan los valores arbitrarios de coma flotante con el infinito?
Estoy usando el tipo float
y creo que se puede suponer con seguridad que mi hardware objetivo implementa un valor de infinito.
Aquí hay un código de ejemplo:
auto leastValue = std::numeric_limits<float>::infinity();
for (auto i = something.begin(), e = something.end(); i != e; ++i)
{
auto value = (*i)->GetValue();
if (value < leastValue)
{
leastValue = value;
}
}
También podría simplemente usar el primer valor como su valor inicial. Lo más probable es que todavía funcione si lo pones en infinito; Solo señalo que en realidad * no necesita * usar un valor inicial especial. –
Al sacar 'i' del ciclo y agregar un cheque adicional para una colección vacía, pude. Pero ¿no sería eso la pregunta inútil? ;) – kiw
Usa 'std :: min_element' y deja que se preocupe por cosas como esa? –