On Sunday, 31 October 2021 at 16:54:35 UTC, pascal111 wrote:
Hi! I'm C learner and found the high similarity between C and D, and was converting C code into D but couldn't get the equivalent of this C statement "srand(time(NULL));".

Since D gives you access to the C standard library, you can use pretty much exactly the same code in D:

```d
import core.stdc.stdlib; // bindings for <stdlib.h>
import core.stdc.time; // bindings for <time.h>

srand(time(null)); // null is lower-case in D
```

If you want to use D's standard library, you can instead use [`std.random.rndGen`][1], the default random number generator. Its documentation says:

It is allocated per-thread and initialized to an unpredictable value for each thread.

In other words, it is seeded for you automatically. So when you are converting C code that uses `rand` to D code that uses `rndGen`, you can simply delete the line `srand(time(NULL));`, and it will work ask expected.

If you wanted to seed it yourself, however, you would do it using the `.seed` method, and generate the seed using [`std.random.unpredictableSeed`][2].

```d
import std.random;

rndGen.seed(unpredictableSeed());
```

This is mainly useful when you are using a custom RNG instead of the default `rndGen`, since custom RNGs are *not* automatically seeded.

[1]: https://phobos.dpldocs.info/std.random.rndGen.html
[2]: https://phobos.dpldocs.info/std.random.unpredictableSeed.1.html

Reply via email to