Kaydet (Commit) df466d79 authored tarafından Thomas Arnhold's avatar Thomas Arnhold

fdo#70474: Random number generation weak with Rnd in BASIC

Just reuse the rng functionality. This improves the randomness.

Initialize seed with system time if no argument for RANDOMIZE is given. As the help text
states: "If Number is omitted, the generator uses the current value of the system timer".

Change-Id: I5fa46e8344b2402dff66a8db2449d43e2ca27d6d
Reviewed-on: https://gerrit.libreoffice.org/9349Reviewed-by: 's avatarThomas Arnhold <thomas@arnhold.org>
Tested-by: 's avatarThomas Arnhold <thomas@arnhold.org>
üst 9c3e819f
......@@ -29,6 +29,7 @@
#include <com/sun/star/uno/XInterface.hpp>
#include <com/sun/star/util/DateTime.hpp>
#include <comphelper/processfactory.hxx>
#include <comphelper/random.hxx>
#include <comphelper/string.hxx>
#include <cstddef>
#include <ctype.h>
......
......@@ -45,6 +45,7 @@
#include "errobject.hxx"
#include <comphelper/processfactory.hxx>
#include <comphelper/random.hxx>
#include <comphelper/string.hxx>
#include <com/sun/star/uno/Sequence.hxx>
......@@ -3521,16 +3522,16 @@ RTLFUNC(Randomize)
{
StarBASIC::Error( SbERR_BAD_ARGUMENT );
}
sal_Int16 nSeed;
int nSeed;
if( rPar.Count() == 2 )
{
nSeed = (sal_Int16)rPar.Get(1)->GetInteger();
nSeed = (int)rPar.Get(1)->GetInteger();
}
else
{
nSeed = (sal_Int16)rand();
nSeed = (int)time(NULL);
}
srand( nSeed );
comphelper::rng::seed( nSeed );
}
RTLFUNC(Rnd)
......@@ -3544,9 +3545,7 @@ RTLFUNC(Rnd)
}
else
{
double nRand = (double)rand();
nRand = ( nRand / ((double)RAND_MAX + 1.0));
rPar.Get(0)->PutDouble( nRand );
rPar.Get(0)->PutDouble( comphelper::rng::uniform() );
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment