Portál AbcLinuxu, 10. května 2025 09:48

Dotaz: RND() podivne chovani

31.3.2016 00:46 basss | skóre: 2
RND() podivne chovani
Přečteno: 1321×
Odpovědět | Admin

Zdravim vsechny

Udelal jsem si proceduru s rnd ta pocita pruchody nez najde stejna nahodna cisla v promenych hodnotaX , v promene max_cislo se da nastavit max rozsah z ktereho hleda , pri nastaveni max rozsah do hodnoty 6 tak vysledky jsou v rozsahu hodnotaX 1-6

Problem : kdyz se max rozsah nastavi na vic jak 6 tak mam ve vysledku hodnotaX jen cislo 1 nebo max rozsah a to podle me neni dobre .

Prosim muzete zkusit ve svych db test procedury co je o kousek nize jestli vam to dela stejne vysledky nebo jestli tam mam chybu a jestli tu bude i nekdo kdo napise v cem byl bych rad .

Info : Linux Slackware 14.1 + mysql 5.6.27

/***************************************************************************/

BEGIN
DECLARE max_cislo,v_poradku,pruchodu,hodnota1,hodnota2,hodnota3,hodnota4,hodnota5 INTEGER DEFAULT 0;

SET max_cislo = 30; -- 6 jeste OK

WHILE v_poradku<1 DO
SELECT (1 + FLOOR(RAND() * (max_cislo))),
(1 + FLOOR(RAND() * (max_cislo))),
(1 + FLOOR(RAND() * (max_cislo))),
(1 + FLOOR(RAND() * (max_cislo))),
(1 + FLOOR(RAND() * (max_cislo)))
INTO hodnota1,hodnota2,hodnota3,hodnota4,hodnota5;

SET pruchodu = pruchodu + 1;
IF (hodnota1=hodnota2 AND hodnota2=hodnota3 and hodnota3=hodnota4 and hodnota4=hodnota5) THEN
SET v_poradku = 1; -- tady je konec
ELSE
SET v_poradku = 0;
END IF;

END while;

SELECT hodnota1,hodnota2,hodnota3,hodnota4,hodnota5,pruchodu;
END

/***************************************************************************/


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

31.3.2016 07:17 basss | skóre: 2
Rozbalit Rozbalit vše Re: RND() podivne chovani
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prosim zkuste proceduru na svych mysql db a napiste jestli mate stejne spatne vysledky a na jake verzi db dekuju
Řešení 1× (Jamie)
31.3.2016 15:58 Jamie
Rozbalit Rozbalit vše Re: RND() podivne chovani
Řekl bych že na vinně je funkce RAND, která dle dokumentace "is not meant to be a perfect random generator".

Vyzkoušel jsem si i malý skriptík, který hledal nejdelší řetězec za sebou jdoucích stejných čísel v řadě náhodných čísel. Vyšlo mi, že čím blíže je u hraničních hodnot (tj. 1 a 30), tím delší řetězec se vyskytuje.

Konkrétní výstup scriptu: http://pastebin.com/EjFhVYYW (hodnota: nejdelší nalezený řetězec)

Takže to co ti vychází i celkem sedí.
31.3.2016 21:23 basss | skóre: 2
Rozbalit Rozbalit vše Re: RND() podivne chovani
dekuju za info a snahu

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.