Параметр не изменяется для std :: chi_squared_distribution

Согласно ответу на этот вопрос, который я пытался изменить параметр распределения в <random> используя .param(), Ниже приведен пример с игрушкой, где я пытаюсь это сделать.

Как для хи-квадрат, так и для нормального распределения у меня есть функция, которая генерирует два значения, второе, где параметр был изменен на .param(), Я запускаю обе функции несколько раз и распечатываю среднее значение для обеих функций. Как и ожидалось, нормальная функция дает средние результаты 0 и 10. Неожиданно функция хи-квадрат дает средние результаты 4 и 4 вместо моих ожиданий 4 и 3. Почему мои ожидания не соответствуют ожиданиям распределения хи-квадрат?

#include <iostream>
#include <random>
#include <vector>

using namespace std;

vector<double> chisqtest(mt19937_64 &gen)
{
vector<double> res(2);
chi_squared_distribution<double> chisq_dist(4);
res[0] = chisq_dist(gen);
chisq_dist.param(std::chi_squared_distribution<double>::param_type (3));
res[1] = chisq_dist(gen);
return res;
}

vector<double> normtest(mt19937_64 &gen)
{
vector<double> res(2);
normal_distribution<double> norm_dist(0,1);
res[0] = norm_dist(gen);
norm_dist.param(std::normal_distribution<double>::param_type (10,1));
res[1] = norm_dist(gen);
return res;
}

int main() {
unsigned int n = 100000;
mt19937_64 gen(1);

vector<double> totals = {0,0}, res(2);
for(unsigned int i = 0; i < n; i++){
res = chisqtest(gen);
totals[0] += res[0];
totals[1] += res[1];
}
cout << totals[0]/n << " " << totals[1]/n << "\n";

vector<double> totals2 = {0,0}, res2;
for(unsigned int i = 0; i < n; i++){
res2 = normtest(gen);
totals2[0] += res2[0];
totals2[1] += res2[1];
}

cout << totals2[0]/n << " " << totals2[1]/n << "\n";
}

6

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …