tdf#154872 Add Poisson distribution to Random Number Generators
Change-Id: I325a76423a98a405dfb0f69fbd89eb9253c36390
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151439
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
diff --git a/sc/inc/strings.hrc b/sc/inc/strings.hrc
index e860263..6c85b3d 100644
--- a/sc/inc/strings.hrc
+++ b/sc/inc/strings.hrc
@@ -266,9 +266,10 @@
#define STR_DISTRIBUTION_CAUCHY NC_("STR_DISTRIBUTION_CAUCHY", "Cauchy")
#define STR_DISTRIBUTION_BERNOULLI NC_("STR_DISTRIBUTION_BERNOULLI", "Bernoulli")
#define STR_DISTRIBUTION_BINOMIAL NC_("STR_DISTRIBUTION_BINOMIAL", "Binomial")
#define STR_DISTRIBUTION_NEGATIVE_BINOMIAL NC_("STR_DISTRIBUTION_NEGATIVE_BINOMIAL", "Negative Binomial")
#define STR_DISTRIBUTION_CHI_SQUARED NC_("STR_DISTRIBUTION_CHI_SQUARED", "Chi Squared")
#define STR_DISTRIBUTION_GEOMETRIC NC_("STR_DISTRIBUTION_GEOMETRIC", "Geometric")
#define STR_DISTRIBUTION_NEGATIVE_BINOMIAL NC_("STR_DISTRIBUTION_NEGATIVE_BINOMIAL", "Negative Binomial")
#define STR_DISTRIBUTION_POISSON NC_("STR_DISTRIBUTION_POISSON", "Poisson")
#define STR_RNG_PARAMETER_MINIMUM NC_("STR_RNG_PARAMETER_MINIMUM", "Minimum")
#define STR_RNG_PARAMETER_MAXIMUM NC_("STR_RNG_PARAMETER_MAXIMUM", "Maximum")
#define STR_RNG_PARAMETER_MEAN NC_("STR_RNG_PARAMETER_MEAN", "Mean")
diff --git a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
index 91b43cb..2490ebf 100644
--- a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
@@ -36,6 +36,7 @@ const sal_Int64 DIST_CHI_SQUARED = 5;
const sal_Int64 DIST_GEOMETRIC = 6;
const sal_Int64 DIST_NEGATIVE_BINOMIAL = 7;
const sal_Int64 DIST_UNIFORM_INTEGER = 8;
const sal_Int64 DIST_POISSON = 9;
const sal_Int64 PRECISION = 10000;
const sal_Int64 DIGITS = 4;
@@ -225,13 +226,6 @@ void ScRandomNumberGeneratorDialog::SelectGeneratorAndGenerateNumbers()
GenerateNumbers(rng, STR_DISTRIBUTION_BINOMIAL, aDecimalPlaces);
break;
}
case DIST_NEGATIVE_BINOMIAL:
{
std::negative_binomial_distribution<> distribution(parameterInteger2, parameter1);
auto rng = std::bind(distribution, seed);
GenerateNumbers(rng, STR_DISTRIBUTION_NEGATIVE_BINOMIAL, aDecimalPlaces);
break;
}
case DIST_CHI_SQUARED:
{
std::chi_squared_distribution<> distribution(parameter1);
@@ -246,6 +240,20 @@ void ScRandomNumberGeneratorDialog::SelectGeneratorAndGenerateNumbers()
GenerateNumbers(rng, STR_DISTRIBUTION_GEOMETRIC, aDecimalPlaces);
break;
}
case DIST_NEGATIVE_BINOMIAL:
{
std::negative_binomial_distribution<> distribution(parameterInteger2, parameter1);
auto rng = std::bind(distribution, seed);
GenerateNumbers(rng, STR_DISTRIBUTION_NEGATIVE_BINOMIAL, aDecimalPlaces);
break;
}
case DIST_POISSON:
{
std::poisson_distribution<> distribution(parameter1);
auto rng = std::bind(distribution, seed);
GenerateNumbers(rng, STR_DISTRIBUTION_POISSON, aDecimalPlaces);
break;
}
}
}
@@ -476,6 +484,16 @@ IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, DistributionChanged, weld::ComboB
mxParameter2Value->hide();
break;
}
case DIST_POISSON:
{
mxParameter1Text->set_label(ScResId(STR_RNG_PARAMETER_MEAN));
mxParameter1Value->set_value(PRECISION);
mxParameter1Value->set_increments(1000, 10000);
mxParameter1Value->set_min(1000);
mxParameter2Text->hide();
mxParameter2Value->hide();
break;
}
}
}
diff --git a/sc/uiconfig/scalc/ui/randomnumbergenerator.ui b/sc/uiconfig/scalc/ui/randomnumbergenerator.ui
index e6f8f93..d948104 100644
--- a/sc/uiconfig/scalc/ui/randomnumbergenerator.ui
+++ b/sc/uiconfig/scalc/ui/randomnumbergenerator.ui
@@ -240,6 +240,7 @@
<item id="5" translatable="yes" context="randomnumbergenerator|distribution-liststore">Chi Squared</item>
<item id="6" translatable="yes" context="randomnumbergenerator|distribution-liststore">Geometric</item>
<item id="7" translatable="yes" context="randomnumbergenerator|distribution-liststore">Negative Binomial</item>
<item id="9" translatable="yes" context="randomnumbergenerator|distribution-liststore">Poisson</item>
</items>
<child internal-child="accessible">
<object class="AtkObject" id="distribution-combo-atkobject">