Portál AbcLinuxu, 1. listopadu 2025 00:19
#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.