В проекте я генерирую миллионы expo (лямбда) случайных величин, где лямбда потенциально очень велика. При использовании std::exponential_distribution<float>
я иногда получаю возвращаемое значение inf
. Я бы понял это, если бы лямбда была близка к 0, но когда лямбда велика, ожидается значение, очень близкое к нулю. Например, следующая программа обычно завершает работу после нескольких миллионов др aws:
#include<iostream>
#include<random>
int main(void)
{
std::random_device rd;
std::mt19937 generator(rd());
float lambda = 1000000.0;
float val = 0;
for(int i = 0; i < 1000000000; ++i)
{
std::exponential_distribution<float> dist(lambda);
val = dist(generator);
if(isinf(val))
{
std::cout << i << " " << val << " failure" << std::endl;
exit(0);
}
}
return 0;
}
Если в функции есть какая-то ошибка (из-за точности), почему она возвращает inf
вместо более удобно 0.0
? Есть ли способ исправить это, кроме ручной проверки конечности вывода? Спасибо.