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));

}

Reply via email to