Autor
|
Tema: Numeros Aleatorios-Simulacion (Leído 2,307 veces)
|
pacman22
Desconectado
Mensajes: 9
|
Estoy haciendo una simulación de una inversión de proyectos , y la pregunta es si uso srand(time(null)), corro el riesgo que se ejecute muy rapido y tome el mismo tiempo de sistema y termine usando la misma semilla?, entonces decidi poner srand(i) y usar el ciclo para generar distinas semillas, pero me genera los mismos numeros aleatorios . Aqui el codigo por las dudas #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { /*Estructura de datos para numeros aleatorios*/ double numAlea[5]; /*Estructura de dato para el flujo de fondos*/ double matFlujos[6][11]; /*Estructura de datos para variables*/ /*a-b-c*/ double vIAF[3]={3500000,4000000,5000000}; double vIAT[3]={300000,400000,500000}; double Ventas[3]={3000000,3800000,4000000}; double costosSA[3]={400000,500000,600000}; double vInf[3]={0.4,0.3,0.25}; /*Variables iniciales*/ double vr; double impGanancias; /*Variables auxiliares*/ int i,j; double IAF,IAT,aux,inf,amort,sFFT; /*Archivo*/ FILE* ptFichero; ptFichero = fopen("FFTactualizados.txt", "wt"); vr=0.8; impGanancias=0.65; /*10 mil repeticiones, para generar las TIR*/ for (i=0;i<3;i++) { printf("\n %i",i); srand(i); for (j=0;j<5;j++) { numAlea[j]=( (rand()%100000) /100000); } /*Cargar valor de inversion activo fijo*/ if (numAlea[0]< (vIAF[1]-vIAF[0])/(vIAF[2]-vIAF[0])) IAF=vIAF[0]+sqrt(numAlea[0]*(vIAF[1]-vIAF[0])*(vIAF[2]-vIAF[0])); else IAF=vIAF[2]-sqrt((1-numAlea[0])*(vIAF[2]-vIAF[0])*(vIAF[2]-vIAF[1])); /*Cargar valor de inversion en activo de trabajo*/ if (numAlea[1]< (vIAT[1]-vIAT[0])/(vIAT[2]-vIAT[0])) IAT=vIAT[0]+sqrt(numAlea[1]*(vIAT[1]-vIAT[0])*(vIAT[2]-vIAT[0])); else IAT=vIAT[2]-sqrt((1-numAlea[1])*(vIAT[2]-vIAT[0])*(vIAT[2]-vIAT[1])); /*Calcular la amortizacion*/ amort=((IAF*vr)/10); /*Cargar valor de la inflacion*/ if (numAlea[4]< (vInf[1]-vInf[0])/(vInf[2]-vInf[0])) inf=vInf[0]+sqrt(numAlea[4]*(vInf[1]-vInf[0])*(vInf[2]-vInf[0])); else inf=vInf[2]-sqrt((1-numAlea[4])*(vInf[2]-vInf[0])*(vInf[2]-vInf[1])); /*Cargar la fila del ingreso de las ventas*/ if (numAlea[2]<( (Ventas[1]-Ventas[0]/Ventas[2]-Ventas[0]))) aux=Ventas[0]+sqrt(numAlea[2]*(Ventas[1]-Ventas[0])*(Ventas[2]-Ventas[0])); else aux=Ventas[2]-sqrt((1-numAlea[2])*(Ventas[2]-Ventas[0])*(Ventas[2]-Ventas[1])); for (j=1;j<11;j++) matFlujos[0][j]=aux; /*Cargar la fila de los costos totales*/ if (numAlea[3]<((costosSA[1]-costosSA[0])/(costosSA[2]-costosSA[0]))) aux=costosSA[0]+sqrt(numAlea[3]*(costosSA[1]-costosSA[0])*((costosSA[2]-costosSA[0]))); else aux=costosSA[2]-sqrt((1-numAlea[3])*((costosSA[2]-costosSA[0])*((costosSA[2]-costosSA[1])))); aux=aux+amort; for (j=1;j<11;j++) matFlujos[1][j]=aux; /*Cargar fila de la utilidad neta*/ for (j=1;j<11;j++) matFlujos[2][j]=(matFlujos[0][j]-matFlujos[1][j])*impGanancias; /*Cargar fila de FFO*/ for (j=1;j<10;j++) matFlujos[3][j]=matFlujos[2][j]+amort; matFlujos[3][10]=((matFlujos[2][10])+(IAT)+(IAF*0.2)+amort); /*Cargar fila del FFT*/ matFlujos[4][0]=-(IAF+IAT); for (j=1;j<10;j++) matFlujos[4][j]=matFlujos[2][j]+amort; matFlujos[4][10]=(matFlujos[2][10])+(IAF*0.2)+IAT+amort; /*Cargar el FFT actualizado con la inflacion*/ for (j=0;j<11;j++) matFlujos[5][j]=matFlujos[4][j]/pow((1+inf),j); /*Sumar los flujos de fondos operativos sFFT=0; for (j=0;j<12;j++) sFFT=sFFT+matFlujos[5][j];*/ /*Copiar al archivo*/ for (j=0;j<11;j++) fprintf(ptFichero, "%f ", matFlujos[5][j]); fprintf(ptFichero, "\n", ""); } fclose(ptFichero); return 0; }
|
|
|
En línea
|
|
|
|
engel lex
|
srand genera un numero aleatorio a base de una semilla, es decir, es un calculo matematico a base del numero introducido... puedes aplicar sumar el tiempo al ciclo para asegurarte tener 2 factores de aletoriedad y no se repita por tiempo o ciclo
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
pacman22
Desconectado
Mensajes: 9
|
Estuve depurando el codigo y vi que en esta parte numAlea[j]=( (rand()%100000) /100000) , solo genera 0's , no entiendo el por q, necesito generar numeros entre [0,1)
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Estuve depurando el codigo y vi que en esta parte numAlea[j]=( (rand()%100000) /100000) , solo genera 0's , no entiendo el por q Porque el resultado de "rand() % 100000" esta en el rango [0, 100000) y la división entera descarta la parte decimal, por ello el resultado de "(rand() % 100000) / 100000" siempre es cero. necesito generar numeros entre [0,1) Para ello debes utilizar "rand() / (RAND_MAX + 1.0)". Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
pacman22
Desconectado
Mensajes: 9
|
Porque el resultado de "rand() % 100000" esta en el rango [0, 100000) y la división entera descarta la parte decimal, por ello el resultado de "(rand() % 100000) / 100000" siempre es cero. Para ello debes utilizar "rand() / (RAND_MAX + 1.0)".
Un saludo
Con una sola semilla que genere en srand , alcanza para generar 50 mil números aleatorios independientes?
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
El numero de valores únicos que puede generar la función rand es igual a RAND_MAX + 1 ...
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
NUMEROS ALEATORIOS EN VB
Programación Visual Basic
|
WCIETE
|
3
|
4,018
|
30 Agosto 2005, 01:19 am
por Slasher-K
|
|
|
Numeros aleatorios
Programación Visual Basic
|
Gleper
|
2
|
2,239
|
3 Noviembre 2007, 14:40 pm
por Gleper
|
|
|
NUMEROS ALEATORIOS
Java
|
ponichan
|
6
|
10,264
|
19 Abril 2008, 21:35 pm
por sapito169
|
|
|
Números Aleatorios!
Programación Visual Basic
|
ka0s
|
5
|
4,442
|
9 Abril 2009, 04:27 am
por ka0s
|
|
|
Números Aleatorios
Programación C/C++
|
Kropt32
|
2
|
2,979
|
2 Agosto 2010, 20:43 pm
por do-while
|
|