Pregunta

Tengo algunas funciones que generan doble, flotador, corto, los valores de largo aleatorios. Tengo otra función a la que me pase el tipo de datos y que debe devolver un valor aleatorio. Ahora tengo que elegir en función de que el valor de retorno basado en el tipo de datos pasado. Por ejemplo, si paso de flotación, lo que necesito:

la probabilidad de que la vuelta sea un flotador es 70%, la probabilidad de que el retorno es un doble, a corto o largo es del 10% cada uno. Puedo hacer llamadas a la otra función para generar los correspondientes valores aleatorios, pero ¿cómo puedo encajar en los pesos probabilísticos para el retorno final? Mi código está en C ++.

Algunos indicadores son apreciadas.

Gracias.

¿Fue útil?

Solución

números aleatorios C ++ tienen distribución uniforme. Si necesita variables aleatorias de otro distribución necesita basar su fórmula matemática en la distribución uniforme.

Si usted no tiene una fórmula matemática para su variable aleatoria que puede hacer algo como esto:

int x = rand() % 10;
if (x < 7)
{
 // return float
}
else (if x == 7)
{
 // return double
}
else (if x == 8)
{
 // return short
}
else (if x == 9)
{
 // return long
}

Otros consejos

Esto puede servir como una alternativa para referencias futuras que pueden obtener la probabilidad de valores precisos tales como 99,999% o 0,0001% Para obtener la probabilidad (porcentaje real) hacer como por ejemplo:

//70%
double probability = 0.7;
double result = rand() / RAND_MAX;
if(result < probability)
   //do something

He utilizado este método para crear grandes redes de percolado y funciona como un encanto para los valores de precisión.

No sé si he entendido bien lo que quiere hacer, pero si lo que desea es asegurar que las probabilidades son 70-10-10-10, haga lo siguiente:

  • generar un r número aleatorio en (1,2,3,4,5,6,7,8,9,10)
  • Si r <= 7: float
  • Si r == 8: corta
  • Si r == 9: doble
  • Si r == 10: tiempo

Creo que reconoce y puede adaptar el patrón de valores de probabilidad arbitrarias.

mmonem tiene un buen interruptor probabilística, pero volviendo diferentes tipos no es trivial. Es necesario un único tipo que puede de manera adecuada (para sus propósitos) codificar cualquiera de los valores - echa un vistazo a cualquier impulso ::, impulso :: variante, unión, o convertir al tipo más capaz (probablemente doble), o una representación de cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top