From bc46765ddea425005a7262d03e2b2defd2106a8a Mon Sep 17 00:00:00 2001 From: Giovanni Cerretani Date: Thu, 17 Apr 2025 11:50:51 +0200 Subject: [PATCH 1/3] Avoid useless call to sqrt, log and _XLgamma on poisson_distrubution in case of small mean, since those values are never used. --- stl/inc/random | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/stl/inc/random b/stl/inc/random index fa401b630cd..c538d9d3510 100644 --- a/stl/inc/random +++ b/stl/inc/random @@ -2782,10 +2782,13 @@ public: void _Init(_Ty1 _Mean0) noexcept { // set internal state _STL_ASSERT(0.0 < _Mean0, "invalid mean argument for poisson_distribution"); _Mean = _Mean0; + if (_Mean0 < 12.0) { + _Small._Init(_Mean0); + return; + } _Sqrt = _CSTD sqrt(2.0 * _Mean0); _Logm = _CSTD log(_Mean0); _Gx1 = _Mean0 * _Logm - _XLgamma(_Mean0 + 1.0); - _Small._Init(_Mean0); } _Ty1 _Mean; From 1bbe8398e1027a02c86ca969bde112bc1322c887 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Thu, 17 Apr 2025 14:49:04 -0700 Subject: [PATCH 2/3] Extract `_Small_threshold`. --- stl/inc/random | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/stl/inc/random b/stl/inc/random index c538d9d3510..8fe60a755be 100644 --- a/stl/inc/random +++ b/stl/inc/random @@ -2779,10 +2779,12 @@ public: return _Mean; } + static constexpr double _Small_threshold = 12.0; + void _Init(_Ty1 _Mean0) noexcept { // set internal state _STL_ASSERT(0.0 < _Mean0, "invalid mean argument for poisson_distribution"); _Mean = _Mean0; - if (_Mean0 < 12.0) { + if (_Mean0 < _Small_threshold) { _Small._Init(_Mean0); return; } @@ -2871,7 +2873,7 @@ public: private: template result_type _Eval(_Engine& _Eng, const param_type& _Par0) const { - if (_Par0._Mean < 12.0) { + if (_Par0._Mean < param_type::_Small_threshold) { return _Par0._Small(_Eng); } From 283f4da0f975c97feb030c00e0ff31cffdb3a78c Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Thu, 17 Apr 2025 14:53:18 -0700 Subject: [PATCH 3/3] Add data member initializers: zero is a strict subset of garbage. --- stl/inc/random | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stl/inc/random b/stl/inc/random index 8fe60a755be..c4fdde3f0de 100644 --- a/stl/inc/random +++ b/stl/inc/random @@ -2740,7 +2740,7 @@ public: } private: - _Ty1 _Gx0; + _Ty1 _Gx0 = 0.0; }; _EXPORT_STD template @@ -2793,10 +2793,10 @@ public: _Gx1 = _Mean0 * _Logm - _XLgamma(_Mean0 + 1.0); } - _Ty1 _Mean; - _Ty1 _Sqrt; - _Ty1 _Logm; - _Ty1 _Gx1; + _Ty1 _Mean = 0.0; + _Ty1 _Sqrt = 0.0; + _Ty1 _Logm = 0.0; + _Ty1 _Gx1 = 0.0; _Small_poisson_distribution<_Ty> _Small; };