On 06/23/2021 21:07, Thomas Koenig wrote:
> Helmut Schellong <
r...@schellong.biz> schrieb:
>> On 06/23/2021 14:27, Bonita Montero wrote:
>>>>> Dumm nur, daß RAND_MAX typischerweise 32767 ...
>>>
>>>> Ist doch passend für einen 15-Bit-Shift.
>>>
>>> Wenn man eine Zufallszahl von [0..N) haben will.
>>> Ansonsten addiert man auf das x in rand() * x eins drauf.
>>>
>> .
>> Ich wundere mich, daß rand() überhaupt noch verwendet wird.
>
> Komptatibilität.
>
> Und für ein Zahlenraten-Spiel reicht die Qualität allemal.
Ja, auf jeden Fall.
>> Vor mehreren Jahrzehnten las ich, daß die völlig veraltet ist und
>> schlechte (miese) Eigenschaften hat.
>
> Typischerweise steht ein linearer Kongruenzgenerator dahinter.
> Schnell zu implentieren, aber für ernsthafte Anwendungen nicht
> wirklich zu gebrauchen.
>
>> Man solle doch random() oder [dl]rand48() nehmen.
>>
>> Seit langer Zeit soll man noch besser arc4random() nehmen.
>
> Ist das eine BSD-Spezialität?
>
ARC4RANDOM(3) FreeBSD Library Functions Manual ARC4RANDOM(3)
NAME
arc4random, arc4random_buf, arc4random_uniform, arc4random_stir,
arc4random_addrandom - arc4 random number generator
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <stdlib.h>
uint32_t
arc4random(void);
void
arc4random_buf(void *buf, size_t nbytes);
uint32_t
arc4random_uniform(uint32_t upper_bound);
void
arc4random_stir(void);
void
arc4random_addrandom(unsigned char *dat, int datlen);
DESCRIPTION
The arc4random() function uses the key stream generator employed by the
arc4 cipher, which uses 8*8 8 bit S-Boxes. The S-Boxes can be in about
(2**1700) states. The arc4random() function returns pseudo-random
numbers in the range of 0 to (2**32)-1, and therefore has twice
the range of rand(3) and random(3).
--------------------------------------------------------------------
Ich selbst habe 'Spritz' implementiert, den Nachfolger.
Der liest u.a. aus einem uninitialisierten Puffer im Stack, um
niemals gleiche Sequenzen zu generieren.