es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función de plantilla para la generación de números aleatorios (error de afirmación estática)

Creé una función de plantilla simple para generar un número aleatorio de tipo T (necesito int o float) en el rango [low, high) de la siguiente manera:

template
T randm(T low, T high)
{
static std::random_device seeder;
static std::mt19937 gen(seeder());
std::uniform_real_distribution dis(low, high);
return dis(gen);
}

Sin embargo, cuando intento llamarla de la siguiente manera:

int r = randm(0, 10);

Recibo el error: “static assertion failed: result_type must be a floating point type”.

Descubrí que si uso uniform_real_distribution<> en lugar de uniform_real_distribution, funciona, pero no estoy seguro de por qué (y si no me equivoco, uniform_real_distribution<> por defecto es doble y no lo necesito).

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Necesita utilizar uniform_int_distribution en lugar de uniform_real_distribution cuando desee generar un número aleatorio del tipo int. uniform_real_distribution se utiliza para generar un número aleatorio del tipo float o double.

Comments are closed.