mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
517 lines
9.9 KiB
C++
517 lines
9.9 KiB
C++
//
|
|
// FILE: test_range.ino
|
|
// AUTHOR: Rob Tillaart
|
|
// VERSION: 0.1.0
|
|
// PURPOSE: demo
|
|
// DATE: 2020-05-13
|
|
// (c) : MIT
|
|
//
|
|
|
|
#include "Prandom.h"
|
|
|
|
const int runs = 1000;
|
|
|
|
Prandom R;
|
|
|
|
uint32_t start, stop;
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
Serial.println(__FILE__);
|
|
Serial.println();
|
|
|
|
Serial.println(F("TIME\tSUM\t\tSSQ\t\tMIN\tMAX\t\tFunction"));
|
|
for (int i = 0; i < 70; i++) Serial.print('=');
|
|
Serial.println();
|
|
|
|
test_randrange_1();
|
|
test_randrange_2();
|
|
test_randrange_3();
|
|
Serial.println();
|
|
|
|
test_random_0();
|
|
test_random_1();
|
|
test_uniform_2();
|
|
test_triangular_0();
|
|
test_normalvariate_2();
|
|
test_lognormvariate_2();
|
|
test_gauss_2();
|
|
test_expovariate_1();
|
|
test_gammavariate_2();
|
|
test_betavariate_2();
|
|
test_paretovariate_1();
|
|
test_weibullvariate_2();
|
|
test_vonmisesvariate_2();
|
|
|
|
Serial.println("\nDone...");
|
|
}
|
|
|
|
void loop() {}
|
|
|
|
|
|
void test_randrange_1()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.randrange(100);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_randrange_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.randrange(100, 200);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_randrange_3()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.randrange(100, 200, 5);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_random_0()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.random();
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_random_1()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.random(4);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_uniform_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.uniform(EULER, PI);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_triangular_0()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.triangular(0, 10, 3);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_normalvariate_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.normalvariate(5, 1);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_lognormvariate_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.lognormvariate(5, 1);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_gauss_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.gauss(5, 1);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_expovariate_1()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.expovariate(1.0 / 5);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_gammavariate_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.gammavariate(200, 1);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_betavariate_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.betavariate(3, 3);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_paretovariate_1()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.paretovariate(10);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_weibullvariate_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.weibullvariate(PI, 1);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
void test_vonmisesvariate_2()
|
|
{
|
|
float sum = 0;
|
|
float sqsum = 0;
|
|
float _min = 1e20;
|
|
float _max = -1e20;
|
|
start = micros();
|
|
for (int i = 0; i < runs; i++)
|
|
{
|
|
float x = R.vonmisesvariate(PI / 2, 0);
|
|
if (x < _min) _min = x;
|
|
if (x > _max) _max = x;
|
|
sum += x;
|
|
sqsum += x * x;
|
|
}
|
|
stop = micros();
|
|
Serial.print(stop - start);
|
|
Serial.print("\t");
|
|
Serial.print(sum);
|
|
Serial.print("\t\t");
|
|
Serial.print(sqsum);
|
|
Serial.print("\t");
|
|
Serial.print(_min);
|
|
Serial.print("\t");
|
|
Serial.print(_max);
|
|
Serial.print("\t\t");
|
|
Serial.println(__FUNCTION__);
|
|
}
|
|
|
|
// -- END OF FILE --
|