Что делает std::geometric_distribution для вероятности 0?

#c #statistics

#c #Статистика

Вопрос:

Геометрическое распределение вырождается при задании параметра вероятности 0. C включает такое распределение. Определяет ли это поведение, когда вероятность равна 0?

На моей машине под gcc выводится следующий код 9223372036854775808 (т.е. 1ULL << 63 ):

 #include <random>
#include <iostream>

int main() {
    std::mt19937_64 rng(0);
    auto dist = std::geometric_distribution<uint64_t>(0.0);
    std::cerr << dist(rng) << "n";
    return 0;
}
 

Ответ №1:

Согласно последнему стандарту C , geometric_distribution требуется, чтобы p значение было больше нуля и меньше 1.

explicit geometric_distribution(double p);

2 Предварительных условия: 0 < p < 1.

3 Примечания: p соответствует параметру распределения.

Если вы нарушаете это предварительное условие, передавая 0 for p , у вас просто неопределенное поведение. Может случиться что угодно, и ваша программа просто недействительна.

Комментарии:

1. О, это немного неприятно, что оно также не определено для p==1. Полезно знать.