Advertisement
jacknpoe

Números Pseudo-Aleatórios (exceção na linha 19)

May 16th, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. class Tgerador_atraso_fibonacci
  8. {
  9.     public:
  10.     unsigned long semente_1, semente_2;
  11.     unsigned long rand( void);
  12. };
  13.  
  14. unsigned long Tgerador_atraso_fibonacci::rand( void)
  15. {
  16.     unsigned long temporario;
  17.     temporario = this->semente_1 % this->semente_2;
  18.     this->semente_1 = this->semente_2;
  19.     this->semente_2 = temporario;
  20.     return temporario;
  21. }
  22.  
  23. unsigned long semente;
  24.  
  25. unsigned long quadrado_do_meio( void)
  26. {
  27.     semente = semente % 1000000;
  28.     semente = ( ( semente * semente ) / 100 ) % 1000000;  // 1000000-1 é o valor máximo
  29.     return semente;
  30. }
  31.  
  32. unsigned long congruente_linear_potencias( void)
  33. {
  34.     unsigned long temp;
  35.     temp = (unsigned long) ( pow( 283656383, semente) );
  36.     semente = semente + 1;
  37.     return temp % 748646352;
  38. }
  39.  
  40. unsigned long congruente_linear_adaptado( void)
  41. {
  42.     semente = ( 283656383 * semente + 889348993 ) % 748646352;
  43.     return semente;
  44. }
  45.  
  46. unsigned long congruente_linear_multiplicativo( void)
  47. {
  48.     semente = ( 16807 * semente ) % 2147483647;  // 2147483646 é o valor máximo
  49.     return semente;
  50. }
  51.  
  52. const int NUM_AMOSTRAS = 500;
  53. const int NUM_FAIXAS = 10;
  54. const int VALOR_MAX = 100;
  55. const int QTD_ESPERADA = 50;
  56.  
  57. int main( void)
  58. {
  59.     Tgerador_atraso_fibonacci gerador_atraso_fibonacci;
  60.     int i, matriz[ NUM_FAIXAS];
  61.     unsigned long temp;
  62.     double quiquadrado;
  63.     time_t seconds;
  64.     semente = time( &seconds);
  65.     temp = quadrado_do_meio();
  66.     temp = congruente_linear_potencias();
  67.     temp = congruente_linear_adaptado();
  68.     temp = congruente_linear_multiplicativo();
  69.     gerador_atraso_fibonacci.semente_1 = semente;
  70.     gerador_atraso_fibonacci.semente_2 = time( &seconds);
  71.  
  72.     cout << "AMOSTRAS: " << NUM_AMOSTRAS << endl;
  73.  
  74.     // TESTE DO QUADRADO DO MEIO
  75.     cout << "QUADRADO DO MEIO | Semente: " << semente << endl;
  76.     for( i = 0; i < NUM_FAIXAS; i++ ) matriz[ i] = 0;
  77.     for( i = 0; i < NUM_AMOSTRAS; i++ )
  78.     {
  79.         temp = quadrado_do_meio() % VALOR_MAX;
  80.         matriz[ temp / ( VALOR_MAX / NUM_FAIXAS) ]++;
  81.     }
  82.     quiquadrado = 0;
  83.     for( i = 0; i < NUM_FAIXAS; i++ ) quiquadrado += pow( QTD_ESPERADA - matriz[ i], 2) / QTD_ESPERADA;
  84.     cout << "Quiquadrado: " << quiquadrado << endl;
  85.  
  86.     // TESTE DO LINEAR BASEADO EM POTÊNCIAS
  87.     cout << "LINEAR BASEADO EM POTENCIAS | Semente: " << semente << endl;
  88.     for( i = 0; i < NUM_FAIXAS; i++ ) matriz[ i] = 0;
  89.     for( i = 0; i < NUM_AMOSTRAS; i++ )
  90.     {
  91.         temp = congruente_linear_potencias() % VALOR_MAX;
  92.         matriz[ temp / ( VALOR_MAX / NUM_FAIXAS) ]++;
  93.     }
  94.     quiquadrado = 0;
  95.     for( i = 0; i < NUM_FAIXAS; i++ ) quiquadrado += pow( QTD_ESPERADA - matriz[ i], 2) / QTD_ESPERADA;
  96.     cout << "Quiquadrado: " << quiquadrado << endl;
  97.  
  98.     // TESTE DO LINEAR ADAPTADO
  99.     cout << "LINEAR ADAPTADO | Semente: " << semente << endl;
  100.     for( i = 0; i < NUM_FAIXAS; i++ ) matriz[ i] = 0;
  101.     for( i = 0; i < NUM_AMOSTRAS; i++ )
  102.     {
  103.         temp = congruente_linear_adaptado() % VALOR_MAX;
  104.         matriz[ temp / ( VALOR_MAX / NUM_FAIXAS) ]++;
  105.     }
  106.     quiquadrado = 0;
  107.     for( i = 0; i < NUM_FAIXAS; i++ ) quiquadrado += pow( QTD_ESPERADA - matriz[ i], 2) / QTD_ESPERADA;
  108.     cout << "Quiquadrado: " << quiquadrado << endl;
  109.  
  110.     // TESTE DO LINEAR MULTIPLICATIVO
  111.     cout << "LINEAR MULTIPLICATIVO | Semente: " << semente << endl;
  112.     for( i = 0; i < NUM_FAIXAS; i++ ) matriz[ i] = 0;
  113.     for( i = 0; i < NUM_AMOSTRAS; i++ )
  114.     {
  115.         temp = congruente_linear_multiplicativo() % VALOR_MAX;
  116.         matriz[ temp / ( VALOR_MAX / NUM_FAIXAS) ]++;
  117.     }
  118.     quiquadrado = 0;
  119.     for( i = 0; i < NUM_FAIXAS; i++ ) quiquadrado += pow( QTD_ESPERADA - matriz[ i], 2) / QTD_ESPERADA;
  120.     cout << "Quiquadrado: " << quiquadrado << endl;
  121.  
  122.     // TESTE DO GERADOR ATRASO FIBONACCI
  123.     cout << "GERADOR ATRASO FIBONACCI | Sementes: " << gerador_atraso_fibonacci.semente_1 << ", " << gerador_atraso_fibonacci.semente_2 << endl;
  124.     for( i = 0; i < NUM_FAIXAS; i++ ) matriz[ i] = 0;
  125.     for( i = 0; i < NUM_AMOSTRAS; i++ )
  126.     {
  127.        temp = gerador_atraso_fibonacci.rand( ) % VALOR_MAX;
  128.        matriz[ temp / ( VALOR_MAX / NUM_FAIXAS) ]++;
  129.     }
  130.     quiquadrado = 0;
  131.     for( i = 0; i < NUM_FAIXAS; i++ ) quiquadrado += pow( QTD_ESPERADA - matriz[ i], 2) / QTD_ESPERADA;
  132.     cout << "Quiquadrado: " << quiquadrado << endl;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement