Проверка генератора случайных чисел - C (СИ)
Формулировка задачи:
вот программа которая включает в себя генератор случайных чисел и "проверку случайности чисел"
она запускается потом генерирует 1000 чесел и все делал по лекционной вот она
но моя прога работает не так как лекционная может кто подскажет что исправить
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
unsigned Xi=5, m=0x5A97;
unsigned srand(void)
{
unsigned R;
Xi=(Xi*m)%256;
R=Xi >> 2;
return R;
}
void main(void)
{ int i,Test[16];
unsigned j,r;
// obnulit schetchik
for(j=0;j<16;j++) Test[j]=0;
// podschet chisel
for(i=0;i<1000;i++)
{
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Десять случайных чисел в интервале от 0 до 99\n\n");
for(i=0; i<10; i++) printf("%d\n", rand() % 100);
}
// sgenerirovat chislo
r=srand();
j=r/1024; Test[j]++;
}
printf(" nomer chislo\n");
printf("otezok popdeniy\n");
for(j=0;j<16;j++) printf(" %2u %3d\n",j,Test[j]);
printf("\n");
}#include <stdio.h>
unsigned Xi=5, m=0x5A97;
// Генератор случайных целых чисел
unsigned URandom(void)
{
unsigned R;
asm {
mov AX,Xi
mov DX,m
mul DX
mov Xi,AX
shr AX,1
shr AX,1
mov R,AX
}
return R;
}
void main(void) { int i,Test[16];
unsigned j,r;
// Обнулить счетчики попаданий
for(j=0;j<16;j++) Test[j]=0;
// Провести подсчет чисел на отрезках
for(i=0;i<1000;i++)
{
// Сгенерировать число
r=URandom();
// Определить номер отрезка и увеличить счетчик на 1
j=r/1024; Test[j]++;
}
printf(" Номер Число\n");
printf("отрезка попаданий\n");
for(j=0;j<16;j++) printf(" %2u %3d\n",j,Test[j]);
printf("\n");
}Решение задачи: «Проверка генератора случайных чисел»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
unsigned Xi=5, m=0x5A97;
unsigned srand(void)
{
unsigned R;
Xi=(Xi*m)%256;//Xi и m заданы постоянными значениями, поэтому в этой строке Xi становится всегда равной 243
R=Xi >> 2;// R всегда будет равной 60
return R;// Итак всегда возвращаемое значение будет равным 60
}
void main(void)
{ int i,Test[16];
unsigned j,r;
// obnulit schetchik
for(j=0;j<16;j++) Test[j]=0;
// podschet chisel
for(i=0;i<1000;i++)
{
{
int i;
time_t t;
srand((unsigned) time(&t));
printf("Десять случайных чисел в интервале от 0 до 99\n\n");
for(i=0; i<10; i++) printf("%d\n", rand() % 100);
}
// sgenerirovat chislo
r=srand(); // r тысячу раз будет равной 60
j=r/1024; Test[j]++; // соответственно j тысячу раз станет равной нулю, и значит только элемент с индексом ноль в массиве Test[] тысячу раз увеличится на 1.
}
printf(" nomer chislo\n");
printf("otezok popdeniy\n");
for(j=0;j<16;j++) printf(" %2u %3d\n",j,Test[j]);
printf("\n");
}