44 lines
1.1 KiB
C
44 lines
1.1 KiB
C
#pragma once
|
|
#include <stdint.h>
|
|
|
|
/*
|
|
* This is a PRNG for non-cryptographic use. May be used on micros given that
|
|
* the seed is periodically saved to EEPROM or flash.
|
|
*/
|
|
|
|
/**
|
|
* @brief Sets the seed for the PRNG.
|
|
*
|
|
* @param s The specific seed value or zero. If zero is passed, it will call
|
|
* rand_reseed().
|
|
*/
|
|
void sprand(uint64_t s);
|
|
|
|
/**
|
|
* @brief Generates a pseudo-random 64-bit number.
|
|
*
|
|
* Saves PRNG state to flash periodically.
|
|
*
|
|
* Uses a simple Linear Congruential Generator (LCG) to produce
|
|
* a sequence of pseudo-random numbers.
|
|
*
|
|
* @return A pseudo-random 64-bit unsigned integer.
|
|
*/
|
|
uint64_t prand();
|
|
|
|
/**
|
|
* @brief Generates a random number within a specified range.
|
|
*
|
|
* Produces a random number in the inclusive range [min, max].
|
|
* Ensures uniform distribution by applying a modulo operation.
|
|
*
|
|
* @param min The lower bound of the range (inclusive).
|
|
* @param max The upper bound of the range (inclusive).
|
|
* @return A random number between min and max.
|
|
*/
|
|
inline uint64_t prand_range(uint64_t min, uint64_t max);
|
|
|
|
/**
|
|
* @brief Re-seeds the PRNG seed state from BUILD_SEED.
|
|
*/
|
|
void rand_reseed();
|