On Monday, 10 August 2020 at 15:43:04 UTC, Andy Balba wrote:
On Monday, 10 August 2020 at 15:13:51 UTC, bachmeier wrote:
On Monday, 10 August 2020 at 14:20:23 UTC, bachmeier wrote:
On Monday, 10 August 2020 at 05:51:07 UTC, Andy Balba wrote:
generating random numbers using
https://dlang.org/library/std/random/uniform01.html
I find the example given in this section totally
incomprehensible
.. Can any help me answer two simple questions:
How to generate a random floating number in range [0,1) ?
How to set a seed value, prior to generating random values ?
Strange example for sure. I'd recommend checking out the
examples on the landing page for std.random:
https://dlang.org/library/std/random.html
I created a PR with a hopefully clearer example:
https://github.com/dlang/phobos/pull/7588
Ahhh yes, yes .. this is the way to write Dlang example code :
https://dlang.org/library/std/random.html
... a very neat random byte generator is at
https://github.com/LightBender/SecureD/tree/master/source/secured
here's the essential code :
import std.digest;
import std.stdio;
import std.exception;
@trusted ubyte[] random (uint bytes)
{
if (bytes == 0)
{ printf("number of bytes must be > zero"); return null; }
ubyte[] buffer = new ubyte[bytes];
try
{ File urandom = File("/dev/urandom", "rb");
urandom.setvbuf (null, _IONBF);
scope(exit) urandom.close();
try
{ buffer= urandom.rawRead(buffer); }
catch(ErrnoException ex)
{ printf("Cant get next random bytes"); return null;}
catch(Exception ex)
{ printf("Cant get next random bytes"); return null; }
}
catch(ErrnoException ex)
{ printf("Cant initialize system RNG"); return null; }
catch(Exception ex)
{ printf ("Cant initialize system RNG"); return null; }
return buffer;
}
void main()
{
ubyte[] rnd1 = random(32);
writeln("32Bytes: ", toHexString!(LetterCase.lower)(rnd1));
ubyte[] rnd2 = random(128);
writeln("128Bytes: ", toHexString!(LetterCase.lower)(rnd2));
ubyte[] rnd3 = random(512);
writeln("512Bytes:");
writeln(toHexString!(LetterCase.lower)(rnd3));
ubyte[] rnd4 = random(2048);
writeln("2048 Bytes:");
writeln(toHexString!(LetterCase.lower)(rnd4));
}