generating random numbers
Andy Balba
pwplus7 at gmail.com
Thu Aug 13 21:08:38 UTC 2020
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));
}
More information about the Digitalmars-d-learn
mailing list