Возвращение NAN или бросание исключения?

У меня есть функция, которая получает образец (AN STD :: Vector ) в качестве ввода и вычисляет среднее значение образца: что лучше Чтобы обработать пустой входной корпус вектора?

Моя первая идея состоит в том, чтобы бросить исключение, как в этом фрагменте:

double average(const std::vector<double>& sample)
{
   size_t sz = sample.size();
   if (sz==0) throw std::exception("unexpected empty vector");

   double acc = 0;
   for (size_t i=0; i<sz; ++i) acc += sample[i];
   return acc/sz;
}

, но я думаю, что другое решение может быть возвращать NAN:

double average(const std::vector<double>& sample)
{
   size_t sz = sample.size();
   if (sz==0) return std::numeric_limits<double>::quiet_NaN();

   double acc = 0;
   for (size_t i=0; i<sz; ++i) acc += sample[i];
   return acc/sz;
}

Мне нравится исключение, потому что это показывает, где Проблема произошла, если я получу NAN в конечном итоге длительного вычисления, у меня будет больше трудностей, чтобы понять, где родился Нэн. Во всяком случае, с NAN, мне нравится возможность возврата «специального» двойного, чтобы сигнализировать о том, что произошло нечто неожиданное.

Есть ли другой способ справляться с пустым вектором? Спасибо.

5
задан Alessandro Jacopson 15 November 2011 в 11:18
поделиться