2010-11-30 14 views
10

Estoy tratando de producir un flotante aleatorio dentro del rango -50.0 y 50.0 inclusive, usando rand(). He buscado una respuesta en todas partes, pero se trata de ints y% operator.¿Producir flotación aleatoria del rango negativo al positivo?

+0

posible duplicado de [flotador aleatoria C++] (http://stackoverflow.com/questions/686353/c-random-float) –

Respuesta

11

Prueba esto:

float RandomNumber(float Min, float Max) 
{ 
    return ((float(rand())/float(RAND_MAX)) * (Max - Min)) + Min; 
} 
5

Prueba esto:

  1. rand() le da un número entre 0 y RAND_MAX
  2. así dividir por RAND_MAX para obtener un número entre 0 y 1
  3. desea un rango de -50 a 100 de 50, así que multiplique por 100.0
  4. finalmente cambie el centro de 50 (entre 0 y 100 por punto 3) a cero restando 50.0
4
((float)rand())/RAND_MAX * 100.0 - 50.0 
4

Honestamente, todas las respuestas actuales no explican que hay un cambio en la distribución de sus soluciones (estoy asumiendo que rand() sigue la distribución uniforme! corrígeme si estoy equivocado por favor). Utilice una biblioteca por favor, y mi recomendación está usando las nuevas instalaciones en C++ 0x:

#include <random> 
#include <functional> 

int main() 
{ 
    std::mt19937 generator; 
    std::uniform_real_distribution<float> uniform_distribution(-50.0, 50.0); 
    auto my_rand = std::bind(uniform_distribution, generator); 
} 

Si no se puede, Boost es una elección perfecta. De esta manera, se puede utilizar my_rand() al igual que rand buen ol():

std::vector<float> random_numbers(1000); 
std::generate(random_numbers.begin(), random_numbers.end(), my_rand); 
+0

La pregunta dice que necesita usar 'rand' específicamente. Pero sí, estoy de acuerdo; si la distribución es realmente importante, el impulso parece ser una buena opción. – Maxpm

+1

@Max: más precisamente, la pregunta dice "intentar ... usar rand()"; el OP nunca dijo que era un * requisito *. – Cascabel

+0

@Jefromi Buen punto. Debo estar más privado de sueño que de costumbre. :PAG – Maxpm

Cuestiones relacionadas