Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Aleatorios de 0.001 a 1

Estas en el tema de Aleatorios de 0.001 a 1 en el foro de C/C++ en Foros del Web. Hola compañeros: Requiero generar numeros aleatorios de 0.001 a 1 logro generar numeros aleatorios decimales con sran48(time(0)), sin embargo, no me genera números aleatorios más ...
  #1 (permalink)  
Antiguo 27/02/2016, 15:49
 
Fecha de Ingreso: febrero-2016
Mensajes: 4
Antigüedad: 8 años, 1 mes
Puntos: 0
Pregunta Aleatorios de 0.001 a 1

Hola compañeros:

Requiero generar numeros aleatorios de 0.001 a 1

logro generar numeros aleatorios decimales con sran48(time(0)), sin embargo, no me genera números aleatorios más bajos que 0.01.

utilizo setprecision(n) pero solo aumenta el número de decimales.

Les agradecería mucho que me apoyaran!!, gracias!
  #2 (permalink)  
Antiguo 27/02/2016, 15:54
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Aleatorios de 0.001 a 1

srand48 no forma parte del estándar sino de las librerías propias de IBM. Si quieres una solución más estándar yo pasaría a usar srand y rand.

En cualquier caso, ¿Cómo estás generando los números? Cualquiera de las dos formas te debería dar números en el rango que indicas.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #3 (permalink)  
Antiguo 27/02/2016, 16:05
 
Fecha de Ingreso: febrero-2016
Mensajes: 4
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Aleatorios de 0.001 a 1

No me genera números menores a 0.01 T_T
y estoy sobre fedora, supongo que por eso puedo usar srand48
Código C++:
Ver original
  1. #include<iostream>
  2. #include <iomanip>
  3. #include <stdio.h>
  4. #include <cstdlib>
  5. #include<time.h>
  6. #include <cmath>
  7. #include<ctime>
  8.  
  9. using namespace std;
  10. using std::setprecision;
  11.  
  12. int main(){
  13. srand48(time(0));
  14. srand(time(0));
  15. float num =0.0001;
  16. float aleatorio[100];
  17. for(int i=1;i<=10;i++){
  18. aleatorio[i] = (drand48()*(num-1.0) + 1.0);
  19. //aleatorio2[i] =1+rand()%(7-1);
  20. //cout<<"aleatorio: "<<aleatorio[i]<<endl;
  21. cout << aleatorio[i] << endl;
  22. }
  23.  
  24.  
  25. }
  #4 (permalink)  
Antiguo 27/02/2016, 16:16
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Aleatorios de 0.001 a 1

Cuando dices que el rango debe ser 0.001-1 te refieres a que quieres limitar la salida a 3 decimales o a que el número no ha de ser inferior a 0.001?

Lo pregunto porque es un rango un tanto curioso y prefiero asegurarme.

En cualquier caso. Tomando como buena la segunda opción, una forma de proceder es la siguiente:

El rango (1-0.001) podemos convertirlo en el rango (0.999-0.0) restando 0.001 a cada límite. Si la función nos devuelve un rango (1.0-0.0) conseguir nuestro rango es pan comido:

Código C:
Ver original
  1. float numero = drand48()*0.999+0.001;

Con la multiplicación pasamos de (1.0-0.0) a (0.999-0.0) y con la suma siguiente pasamos de (0.999-0.0) a (1.0-0.001)

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Última edición por eferion; 27/02/2016 a las 16:21
  #5 (permalink)  
Antiguo 27/02/2016, 16:23
 
Fecha de Ingreso: febrero-2016
Mensajes: 4
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Aleatorios de 0.001 a 1

Bueno ese número ese es el mínimo que puede salir, incluso quiero un número aún más bajo, y 1 es el máximo.
  #6 (permalink)  
Antiguo 27/02/2016, 16:32
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Aleatorios de 0.001 a 1

Con la respuesta anterior deberías tener entonces todo lo necesario.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #7 (permalink)  
Antiguo 27/02/2016, 19:02
 
Fecha de Ingreso: febrero-2016
Mensajes: 4
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Aleatorios de 0.001 a 1

No se si lo hice bien pero como me dijiste me seguía dando los números que no quiero, sin embargo todo lo dividí entre 100
Código C++:
Ver original
  1. int main(){
  2. srand48(time(0));
  3. srand(time(0));
  4. float num =0.0001;
  5. float aleatorio[100];
  6. for(int i=1;i<=10;i++){
  7. aleatorio[i] = ((drand48()*(num-0.999) + 0.999)/100);
  8. //aleatorio2[i] =1+rand()%(7-1);
  9. //cout<<"aleatorio: "<<aleatorio[i]<<endl;
  10. cout << aleatorio[i] << endl;
  11. }
  12.  
  13. cout<<"Resultado: "<<aleatorio[3]<<endl;
  14. }
No es eficiente pero por ahora me sirvió
  #8 (permalink)  
Antiguo 28/02/2016, 03:06
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Aleatorios de 0.001 a 1

Mira que dudo muy mucho que la solución que te di ofrece números fuera del rango que necesitas.

Hasta te expliqué la "magia" que hay tras esa línea.

Otra cosa es que hayas añadido elementos nuevos y éstos hayan alterado el rango final.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: c++
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:06.