Skip to content

Commit 4fc313d

Browse files
committed
specialize raw float/raw double
1 parent 7f61014 commit 4fc313d

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

include/gf2/core/Random.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,25 @@ namespace gf {
7373
template<typename T>
7474
std::enable_if_t<std::is_floating_point_v<T>, T> compute_uniform_float()
7575
{
76-
return static_cast<T>(compute_raw_float());
76+
if constexpr (std::is_same_v<T, double>) {
77+
return compute_raw_double();
78+
} else if constexpr (std::is_same_v<T, float>) {
79+
return compute_raw_float();
80+
} else {
81+
return static_cast<T>(compute_raw_float());
82+
}
7783
}
7884

7985
template<typename T>
8086
std::enable_if_t<std::is_floating_point_v<T>, T> compute_uniform_float(T max)
8187
{
82-
return static_cast<T>(compute_raw_float() * max);
88+
return compute_uniform_float<T>() * max;
8389
}
8490

8591
template<typename T>
8692
std::enable_if_t<std::is_floating_point_v<T>, T> compute_uniform_float(T min, T max)
8793
{
88-
return min + static_cast<T>(compute_raw_float() * (max - min));
94+
return min + compute_uniform_float<T>() * (max - min);
8995
}
9096

9197
template<typename T>
@@ -119,7 +125,8 @@ namespace gf {
119125
}
120126

121127
uint64_t compute_raw_integer(uint64_t max);
122-
double compute_raw_float();
128+
double compute_raw_double();
129+
float compute_raw_float();
123130

124131
private:
125132
RandomEngine m_engine;

library/core/Random.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,16 @@ namespace gf {
220220
return r;
221221
}
222222

223-
double Random::compute_raw_float()
223+
double Random::compute_raw_double()
224224
{
225225
const uint64_t value = m_engine();
226226
return double(value >> 11) * 0x1.0p-53;
227227
}
228228

229+
float Random::compute_raw_float()
230+
{
231+
const uint64_t value = m_engine();
232+
return float(value >> 40) * 0x1.0p-24f;
233+
}
234+
229235
} // namespace gf

0 commit comments

Comments
 (0)