Files
TomZ 414bee9e9f Implementation of OP_REVERSEBYTES
Previously named OP_REVERSE, then OP_BSWAP, then OP_ENDIAN_REVERSE.
2020-04-10 15:17:18 +02:00

34 lines
1.1 KiB
C++

// Copyright (c) 2019 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_TEST_LCG_H
#define BITCOIN_TEST_LCG_H
#include <cstdint>
// Simple 32-bit linear congruential generator with 64-bit internal state,
// often called as "MMIX by Donald Knuth". Knuth attributes the multiplier
// to C. E. Haynes and the increment is not crucial (it only need be odd).
// Knuth, Donald (1997). Seminumerical Algorithms Vol2. Sec 3.3.4. 3rd Ed.
//
// Low bits have short period, hence we use high bits which should have
// the same period as the entire generator (2^64).
class MMIXLinearCongruentialGenerator {
uint64_t state;
public:
MMIXLinearCongruentialGenerator(uint64_t initialstate = 0)
: state(initialstate) {}
// pseudorandom, except the first value returned is the seed provided
// (thus starting with 0, by default)
uint32_t next() {
uint32_t ret = state >> 32;
state = state * 6364136223846793005 + 1442695040888963407;
return ret;
}
};
#endif // BITCOIN_TEST_LCG_H