Skip to content
Snippets Groups Projects
Commit cd1d625a authored by kwolekr's avatar kwolekr
Browse files

Replace PRNG assertions with PrngException

parent 732eb72a
No related branches found
No related tags found
No related merge requests found
......@@ -120,6 +120,11 @@ class ClientStateError : public BaseException {
ClientStateError(std::string s): BaseException(s) {}
};
class PrngException : public BaseException {
public:
PrngException(std::string s): BaseException(s) {}
};
/*
Some "old-style" interrupts:
*/
......
......@@ -115,7 +115,9 @@ u32 PcgRandom::range(u32 bound)
s32 PcgRandom::range(s32 min, s32 max)
{
assert(max >= min);
if (max < min)
throw PrngException("Invalid range (max < min)");
u32 bound = max - min + 1;
return range(bound) + min;
}
......
......@@ -26,8 +26,8 @@
#ifndef NOISE_HEADER
#define NOISE_HEADER
#include "debug.h"
#include "irr_v3d.h"
#include "exceptions.h"
#include "util/string.h"
extern FlagDesc flagdesc_noiseparams[];
......@@ -56,14 +56,16 @@ class PseudoRandom {
inline int range(int min, int max)
{
assert(max >= min);
if (max < min)
throw PrngException("Invalid range (max < min)");
/*
Here, we ensure the range is not too large relative to RANDOM_MAX,
as otherwise the effects of bias would become noticable. Unlike
PcgRandom, we cannot modify this RNG's range as it would change the
output of this RNG for reverse compatibility.
*/
assert((u32)(max - min) <= (RANDOM_RANGE + 1) / 10);
if ((u32)(max - min) > (RANDOM_RANGE + 1) / 10)
throw PrngException("Range too large");
return (next() % (max - min + 1)) + min;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment