mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 20:50:33 +00:00
Use random library instead of rand()
This commit is contained in:
parent
f0e6d6cbfa
commit
8a2d21cc40
@ -20,8 +20,8 @@
|
|||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <limits>
|
|
||||||
#include <list>
|
#include <list>
|
||||||
|
#include <random>
|
||||||
|
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/tokenizer.hpp>
|
#include <boost/tokenizer.hpp>
|
||||||
@ -35,7 +35,10 @@
|
|||||||
#include <volk_gnsssdr/volk_gnsssdr_malloc.h>
|
#include <volk_gnsssdr/volk_gnsssdr_malloc.h>
|
||||||
|
|
||||||
float uniform() {
|
float uniform() {
|
||||||
return 2.0f * ((float) rand() / RAND_MAX - 0.5f); // uniformly (-1, 1)
|
std::random_device r;
|
||||||
|
std::default_random_engine e1(r());
|
||||||
|
std::uniform_real_distribution<float> uniform_dist(-1, 1);
|
||||||
|
return uniform_dist(e1); // uniformly (-1, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class t>
|
template <class t>
|
||||||
@ -47,7 +50,11 @@ void random_floats (t *buf, unsigned n)
|
|||||||
|
|
||||||
void load_random_data(void *data, volk_gnsssdr_type_t type, unsigned int n)
|
void load_random_data(void *data, volk_gnsssdr_type_t type, unsigned int n)
|
||||||
{
|
{
|
||||||
|
std::random_device r;
|
||||||
|
std::default_random_engine e2(r());
|
||||||
|
|
||||||
if(type.is_complex) n *= 2;
|
if(type.is_complex) n *= 2;
|
||||||
|
|
||||||
if(type.is_float)
|
if(type.is_float)
|
||||||
{
|
{
|
||||||
if(type.size == 8) random_floats<double>((double *)data, n);
|
if(type.size == 8) random_floats<double>((double *)data, n);
|
||||||
@ -57,10 +64,11 @@ void load_random_data(void *data, volk_gnsssdr_type_t type, unsigned int n)
|
|||||||
{
|
{
|
||||||
float int_max = float(uint64_t(2) << (type.size*8));
|
float int_max = float(uint64_t(2) << (type.size*8));
|
||||||
if(type.is_signed) int_max /= 2.0;
|
if(type.is_signed) int_max /= 2.0;
|
||||||
|
std::uniform_real_distribution<float> uniform_dist(-int_max, int_max);
|
||||||
for(unsigned int i = 0; i < n; i++)
|
for(unsigned int i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
float scaled_rand = (((float) (rand() - (RAND_MAX/2))) / static_cast<float>((RAND_MAX/2))) * int_max;
|
float scaled_rand = uniform_dist(e2);
|
||||||
//man i really don't know how to do this in a more clever way, you have to cast down at some point
|
|
||||||
switch(type.size)
|
switch(type.size)
|
||||||
{
|
{
|
||||||
case 8:
|
case 8:
|
||||||
|
Loading…
Reference in New Issue
Block a user