mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-03 08:36:55 +02:00
Fix portability bug in get_normal_pair (RAND_MAX != MAX_RANDOM_VALUE).
Also try to improve readability and performance.
This commit is contained in:
parent
49c86099f3
commit
d3ebc1ae4a
@ -224,18 +224,16 @@ get_normal_pair(float8 *x1, float8 *x2)
|
|||||||
v2,
|
v2,
|
||||||
s;
|
s;
|
||||||
|
|
||||||
for (;;)
|
do
|
||||||
{
|
{
|
||||||
u1 = (float8) random() / (float8) RAND_MAX;
|
u1 = (float8) random() / (float8) MAX_RANDOM_VALUE;
|
||||||
u2 = (float8) random() / (float8) RAND_MAX;
|
u2 = (float8) random() / (float8) MAX_RANDOM_VALUE;
|
||||||
|
|
||||||
v1 = (2.0 * u1) - 1.0;
|
v1 = (2.0 * u1) - 1.0;
|
||||||
v2 = (2.0 * u2) - 1.0;
|
v2 = (2.0 * u2) - 1.0;
|
||||||
|
|
||||||
s = pow(v1, 2) + pow(v2, 2);
|
s = v1 * v1 + v2 * v2;
|
||||||
|
} while (s >= 1.0);
|
||||||
if (s >= 1.0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (s == 0)
|
if (s == 0)
|
||||||
{
|
{
|
||||||
@ -244,11 +242,9 @@ get_normal_pair(float8 *x1, float8 *x2)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*x1 = v1 * sqrt((-2.0 * log(s)) / s);
|
s = sqrt((-2.0 * log(s)) / s);
|
||||||
*x2 = v2 * sqrt((-2.0 * log(s)) / s);
|
*x1 = v1 * s;
|
||||||
}
|
*x2 = v2 * s;
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user