Portál AbcLinuxu, 11. května 2025 23:37
#include <cmath> #include <cstdio> #include <cstdlib> #include <iostream> double generuj(int min, int max, int prec) { long ex = pow(10, prec); double r = rand()%((max - min) * ex) + (min * ex); return r / ex; } int main(int argc, char** argv) { srand(time(NULL)); for (int i = 0; i < 10; i++) printf("%.10f\n", generuj(1, 10, 5)); return 0; }Dává výstup
7.1701900000 3.3656600000 9.9872200000 7.2741900000 9.9646100000 8.9658100000 5.6601800000 4.9083500000 6.8956500000 2.4416500000Funkce bude fungovat rozumně samozřejmě jen tehdy, pokud se nebudete blížit k limitům přesnosti zvoleného datového typu.
Funkce bude fungovat rozumně samozřejmě jen tehdy, pokud se nebudete blížit k limitům přesnosti zvoleného datového typu.Budou-li se výsledky např. nějak kumulovat, tak může fungovat zcela nepoužitelně, protože různá čísla budou mít různé pravděpodobnosti. Je zapotřebí (1) Spočíst, kolik různých čísel to může generovat - N. (2) Při generování čísla zahodit ta, která jsou větší než (RAND_MAX/N)*N. (3) Pokud číslo není zahozeno, vzít ho modulo N a pak ho přepočíst na možný výsledek (to už je mapování 1:1).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.