KCoreAddons
9 #include "krandomsequence.h"
11 #if KCOREADDONS_BUILD_DEPRECATED_SINCE(5, 75)
13 #include <QRandomGenerator>
14 #include <QSharedData>
20 SHUFFLE_TABLE_SIZE = 32,
28 int shuffleArray[SHUFFLE_TABLE_SIZE];
36 : d(new KRandomSequencePrivate)
43 : d(new KRandomSequencePrivate)
60 setSeed(
static_cast<int>(lngSeed1));
71 }
else if (lngSeed1 == 0) {
74 d->lngSeed1 = -lngSeed1;
78 static const int sMod1 = 2147483563;
79 static const int sMod2 = 2147483399;
81 void KRandomSequencePrivate::draw()
83 static const int sMM1 = sMod1 - 1;
84 static const int sA1 = 40014;
85 static const int sA2 = 40692;
86 static const int sQ1 = 53668;
87 static const int sQ2 = 52774;
88 static const int sR1 = 12211;
89 static const int sR2 = 3791;
90 static const int sDiv = 1 + sMM1 / SHUFFLE_TABLE_SIZE;
107 for (j = SHUFFLE_TABLE_SIZE + 7; j >= 0; --j) {
109 lngSeed1 = sA1 * (lngSeed1 - k * sQ1) - k * sR1;
114 if (j < SHUFFLE_TABLE_SIZE) {
115 shuffleArray[j] = lngSeed1;
119 lngShufflePos = shuffleArray[0];
127 lngSeed1 = sA1 * (lngSeed1 - k * sQ1) - k * sR1;
135 lngSeed2 = sA2 * (lngSeed2 - k * sQ2) - k * sR2;
140 j = lngShufflePos / sDiv;
141 lngShufflePos = shuffleArray[j] - lngSeed2;
142 shuffleArray[j] = lngSeed1;
144 if (lngShufflePos < 1) {
145 lngShufflePos += sMM1;
152 if (d->lngSeed2 < 0) {
153 d->lngShufflePos += sMod2;
157 if (d->lngSeed1 < 0) {
158 d->lngSeed1 += sMod1;
165 static const double finalAmp = 1.0 / double(sMod1);
166 static const double epsilon = 1.2E-7;
167 static const double maxRand = 1.0 - epsilon;
171 if ((temp = finalAmp * d->lngShufflePos) > maxRand) {
179 unsigned long KRandomSequence::getLong(
unsigned long max)
181 return getInt(
static_cast<int>(max));
188 return max ? ((
static_cast<unsigned int>(d->lngShufflePos)) % max) : 0;
195 return ((
static_cast<unsigned int>(d->lngShufflePos)) & 1);
double bounded(double highest)
virtual ~KRandomSequence()
Standard destructor.
KRandomSequence(int intSeed=0)
Creates a pseudo-random sequence based on the seed lngSeed.
KRandomSequence & operator=(const KRandomSequence &a)
Assignment.
double getDouble()
Get the next number from the pseudo-random sequence.
void setSeed(int intSeed=0)
Restart the sequence based on lngSeed.
bool getBool()
Get a boolean from the pseudo-random sequence.
void modulate(int i)
Modulate the random sequence.
unsigned int getInt(unsigned int max)
Get the next number from the pseudo-random sequence.
QRandomGenerator * global()
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon May 8 2023 04:04:52 by
doxygen 1.8.17 written
by
Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.