Fix MinGW random number compatibility

This commit is contained in:
2026-06-23 10:59:05 +03:00
parent d2005a75af
commit f0e8e35200
+9 -2
View File
@@ -2,7 +2,14 @@
#include <stdlib.h> #include <stdlib.h>
#include "fec.h" #include "fec.h"
#ifdef _WIN32
/* MinGW's C runtime provides rand(), but not the POSIX random(). */
#define fec_random rand
#define MAX_RANDOM RAND_MAX
#else
#define fec_random random
#define MAX_RANDOM 0x7fffffff #define MAX_RANDOM 0x7fffffff
#endif
/* Generate gaussian random double with specified mean and std_dev */ /* Generate gaussian random double with specified mean and std_dev */
double normal_rand(double mean, double std_dev) double normal_rand(double mean, double std_dev)
@@ -20,8 +27,8 @@ double normal_rand(double mean, double std_dev)
* that are inside the unit circle * that are inside the unit circle
*/ */
do { do {
v1 = 2.0 * (double)random() / MAX_RANDOM - 1; v1 = 2.0 * (double)fec_random() / MAX_RANDOM - 1;
v2 = 2.0 * (double)random() / MAX_RANDOM - 1; v2 = 2.0 * (double)fec_random() / MAX_RANDOM - 1;
rsq = v1*v1 + v2*v2; rsq = v1*v1 + v2*v2;
} while(rsq >= 1.0 || rsq == 0.0); } while(rsq >= 1.0 || rsq == 0.0);
fac = sqrt(-2.0*log(rsq)/rsq); fac = sqrt(-2.0*log(rsq)/rsq);