vakho

Modelireba Sak 2 N1 [BETA 2]

Dec 20th, 2013
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define a 211
  6. #define c 0
  7. #define m 253 // 2^8 - 3
  8.  
  9. #define SIZE 10
  10. int ArrayRand[SIZE] = {1, 57, 78, 89, 100, 123, 167, 188, 231, 242};
  11.  
  12. // z*mod(2^b - q)
  13. int simulatedDivision(int z, int b, int q)
  14. {
  15.     int zi = z;
  16.  
  17.     int modul = (1 << b) - q; // m = 2^b - q
  18.    
  19.     int k = zi >> b; // a*z / m
  20.  
  21.     zi = zi & (~(~0 << b)); // (a*z) (mod m)
  22.  
  23.     zi += k*q; // zi + k*q
  24.  
  25.     while (zi >= modul)
  26.         zi -= modul;
  27.  
  28.     return zi;
  29. }
  30.  
  31. int linearCongruentialGenerator(int zi_1)
  32. {
  33.     int zi = a*zi_1;
  34.     return simulatedDivision(zi, 8, 3);
  35. }
  36.  
  37. #define A 4
  38. #define B 14
  39. float TanabradGanawilebuli(float num)
  40. {
  41.     return (num * (B-A) + A);
  42. }
  43.  
  44. int main()
  45. {
  46.     system("COLOR F0");
  47.  
  48.     int i = 0;
  49.     while (i < SIZE)
  50.     {
  51.         printf("ArrayRand[%d] = \t\t%d\t", i, ArrayRand[i]);
  52.         ArrayRand[i] = linearCongruentialGenerator(ArrayRand[i]);
  53.         printf("ArrayRand[%d] = \t%f\n", i, ( ArrayRand[i]/(float)m ));
  54.         i++;
  55.     }
  56.  
  57.     printf("\n\n");
  58.     i = 0;
  59.     while (i < SIZE)
  60.     {
  61.         printf("Tanabrad ganawilebuli[%d] = \t%f\n", i, TanabradGanawilebuli( ArrayRand[i]/(float)m ));
  62.         i++;
  63.     }
  64.  
  65.     system("PAUSE");
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment