summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Arnhold <thomas@arnhold.org>2014-05-13 22:42:49 +0200
committerThomas Arnhold <thomas@arnhold.org>2014-05-17 12:40:58 +0000
commitdf466d79cb126667cc9d5c108367bfa4f5ce76c8 (patch)
tree5aa3ff1daa1a8ebda70b1ad51063e45355807443
parent9c3e819f066acaf9f5a416630fa7dd83fdc2539d (diff)
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/9349 Reviewed-by: Thomas Arnhold <thomas@arnhold.org> Tested-by: Thomas Arnhold <thomas@arnhold.org>
-rw-r--r--basic/inc/pch/precompiled_sb.hxx1
-rw-r--r--basic/source/runtime/methods.cxx13
2 files changed, 7 insertions, 7 deletions
diff --git a/basic/inc/pch/precompiled_sb.hxx b/basic/inc/pch/precompiled_sb.hxx
index 4c0ba1bb6e17..a7cd16b55efa 100644
--- a/basic/inc/pch/precompiled_sb.hxx
+++ b/basic/inc/pch/precompiled_sb.hxx
@@ -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>
diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx
index fe2f00d3a178..2e3c375699b2 100644
--- a/basic/source/runtime/methods.cxx
+++ b/basic/source/runtime/methods.cxx
@@ -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() );
}
}