Skip to content

Commit d622c1b

Browse files
authored
Fix bug in randomSFixed
Fixes bug that caused `randomSFixed(inclusiveLowerBound, exclusiveUpperBound)` to return values beyond its boundaries.
1 parent d2a63fa commit d622c1b

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/FixedPoints/Utils.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ template< unsigned Integer, unsigned Fraction >
203203
UFixed<Integer, Fraction> randomUFixed(const UFixed<Integer, Fraction> & inclusiveLowerBound, const UFixed<Integer, Fraction> & exclusiveUpperBound)
204204
{
205205
using InternalType = typename UFixed<Integer, Fraction>::InternalType;
206-
return UFixed<Integer, Fraction>::fromInternal(inclusiveLowerBound.getInternal() + FIXED_POINTS_DETAILS::RandomHelper<InternalType>::Random() % exclusiveUpperBound.getInternal());
206+
return UFixed<Integer, Fraction>::fromInternal(inclusiveLowerBound.getInternal() + (FIXED_POINTS_DETAILS::RandomHelper<InternalType>::Random() % (exclusiveUpperBound.getInternal() - inclusiveLowerBound.getInternal())));
207207
}
208208

209209
//
@@ -228,6 +228,7 @@ template< unsigned Integer, unsigned Fraction >
228228
SFixed<Integer, Fraction> randomSFixed(const SFixed<Integer, Fraction> & inclusiveLowerBound, const SFixed<Integer, Fraction> & exclusiveUpperBound)
229229
{
230230
using InternalType = typename SFixed<Integer, Fraction>::InternalType;
231-
return SFixed<Integer, Fraction>::fromInternal(inclusiveLowerBound.getInternal() + FIXED_POINTS_DETAILS::RandomHelper<InternalType>::Random() % exclusiveUpperBound.getInternal());
231+
auto value = FIXED_POINTS_DETAILS::RandomHelper<InternalType>::Random();
232+
return SFixed<Integer, Fraction>::fromInternal(inclusiveLowerBound.getInternal() + (abs(value) % (exclusiveUpperBound.getInternal() - inclusiveLowerBound.getInternal())));
232233
}
233234
FIXED_POINTS_END_NAMESPACE

0 commit comments

Comments
 (0)