Replace PRNG assertions with PrngException
This commit is contained in:
parent
732eb72a0c
commit
cd1d625ab2
@ -120,6 +120,11 @@ public:
|
|||||||
ClientStateError(std::string s): BaseException(s) {}
|
ClientStateError(std::string s): BaseException(s) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class PrngException : public BaseException {
|
||||||
|
public:
|
||||||
|
PrngException(std::string s): BaseException(s) {}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Some "old-style" interrupts:
|
Some "old-style" interrupts:
|
||||||
*/
|
*/
|
||||||
|
@ -115,7 +115,9 @@ u32 PcgRandom::range(u32 bound)
|
|||||||
|
|
||||||
s32 PcgRandom::range(s32 min, s32 max)
|
s32 PcgRandom::range(s32 min, s32 max)
|
||||||
{
|
{
|
||||||
assert(max >= min);
|
if (max < min)
|
||||||
|
throw PrngException("Invalid range (max < min)");
|
||||||
|
|
||||||
u32 bound = max - min + 1;
|
u32 bound = max - min + 1;
|
||||||
return range(bound) + min;
|
return range(bound) + min;
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,8 @@
|
|||||||
#ifndef NOISE_HEADER
|
#ifndef NOISE_HEADER
|
||||||
#define NOISE_HEADER
|
#define NOISE_HEADER
|
||||||
|
|
||||||
#include "debug.h"
|
|
||||||
#include "irr_v3d.h"
|
#include "irr_v3d.h"
|
||||||
|
#include "exceptions.h"
|
||||||
#include "util/string.h"
|
#include "util/string.h"
|
||||||
|
|
||||||
extern FlagDesc flagdesc_noiseparams[];
|
extern FlagDesc flagdesc_noiseparams[];
|
||||||
@ -56,14 +56,16 @@ public:
|
|||||||
|
|
||||||
inline int range(int min, int max)
|
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,
|
Here, we ensure the range is not too large relative to RANDOM_MAX,
|
||||||
as otherwise the effects of bias would become noticable. Unlike
|
as otherwise the effects of bias would become noticable. Unlike
|
||||||
PcgRandom, we cannot modify this RNG's range as it would change the
|
PcgRandom, we cannot modify this RNG's range as it would change the
|
||||||
output of this RNG for reverse compatibility.
|
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;
|
return (next() % (max - min + 1)) + min;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user