if you are compiling for non AVR Arduino (ESP32 for example) then you could use std::normal_distribution
here is an example:
#include <random>
std::default_random_engine generator;
std::normal_distribution<double> distribution(5.0, 2.0); // distribution parameters, mean (μ=5.0) and stddev (σ=2.0),
const size_t intervalCount = 10;
size_t draws[intervalCount+1] = {};
const size_t experimentCount = 10000;
const size_t starCount = 100;
void setup() {
Serial.begin(115200); Serial.println();
for (size_t i = 0; i < experimentCount; i++) {
double number = distribution(generator);
if ((number >= 0.0) && (number < intervalCount)) ++draws[size_t(number)];
}
Serial.println("normal_distribution μ=5.0 / σ=2.0");
for (size_t i = 0; i < intervalCount; ++i) {
Serial.print(i); Serial.print(" - "); Serial.print(i + 1); Serial.write('\t');
for (size_t j = 0; j < draws[i] * starCount / experimentCount; j++) Serial.write('*');
Serial.println();
}
Serial.println();
}
void loop() {}
you should see in the Serial Monitor
normal_distribution μ=5.0 / σ=2.0
0 - 1 *
1 - 2 ****
2 - 3 *********
3 - 4 ***************
4 - 5 ******************
5 - 6 *******************
6 - 7 ***************
7 - 8 ********
8 - 9 ****
9 - 10 *
cf https://www.cplusplus.com/reference/random/normal_distribution/