Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 101

Автор Π”. БтСфСнс

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11.9. БтатистичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

#include <numeric>

#include <cmath>

#include <algorithm>

#include <functional>

#include <vector>

#include <iostream>


using namespace std;


template<int N, class T>

T nthPnwer(T x) {

 T ret = x;

 for (int i=1; i < N; ++i) {

  ret *= x;

 }

 return ret;

}


template<class T, int N>

struct SumDiffNthPower {

 SumDiffNthPower(T x) : mean_(x) {};

 T operator()(T sum, T current) {

  return sum + nthPower<N>(current - mean_);

 }

 T mean_;

};


template<class T, int N, class Iter_T>

T nthMoment(Iter_T first, Iter_T last, T mean) {

 size_t cnt = distance(first, last);

 return accumulate(first, last, T(), SumDiffNthPower<T, N>(mean)) / cnt;

}


template<class T, class Iter_T>

T computeVariance(Iter_T first, Iter_T last, T mean) {

 return nthMoment<T, 2>(first, last, mean);

}


template<class T, class Iter_T>

T computeStdDev(Iter_T first, Iter_T last, T mean) {

 return sqrt(computeVariance(first, last, mean));

}


template<class T, class Iter_T>

T computeSkew(Iter_T begin, Iter_T end, T mean) {

 T m3 = nthMoment<T, 3>(begin, end, mean);

 T m2 = nthMoment<T, 2>(begin, end, mean);

 return m3 / (m2 * sqrt(m2));

}


template<class T, class Iter_T>

T computeKurtosisExcess(Iter_T begin, Iter_T end, T mean) {

 T m4 = nthMoment<T, 4>(begin, end, mean);

 T m2 = nthMoment<T, 2>(begin, end, mean);

 return m4 / (m2 * m2) - 3;

}


template<class T, class Iter_T>

void computeStats(Iter_T first, Iter_T last, T& sum, T& mean,

 T& var, T& std_dev, T& skew, T& kurt) {

 size_t cnt = distance(first, last);

 sum = accumulate(first, last, T());

 mean = sum / cnt;

 var = computeVariance(first, last, mean);

 std_dev = sort(var);

 skew = computeSkew(first, last, mean);

 kurt = computeKurtosisExcess(first, last, mean);

}


int main() {

 vector<int> v;

 v.push_back(2);

 v.push_back(4);

 v.push_back(8);

 v.push_back(10);

 v.push_back(99);

 v.push_back(1);

 double sum, mean, var, dev, skew, kurt;

 computeStats(v.begin(), v.end(), sum, mean, var, dev, skew, kurt);

 cout << "count = " << v.size() << "\n";

 cout << "sum = " << sum << "\n";

 cout << "mean = " << mean << "\n";

 cout << "variance = " << var << "\n";

 cout << "standard deviation = " << dev << "\n";

 cout << "skew = " << skew << "\n";

 cout << "kurtosis excess = " << kurt << "\n";

 cout << endl;

}

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 11.9 Π²Ρ‹Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

count = 6

sum = 124

mean = 20.6667

variance = 1237.22

standard deviation = 35.1742

skew = 1.75664

kurtosis excess = 1.14171

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

НСкоторыС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ статистичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, диспСрсия, стандартноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅, коэффициСнт асиммСтрии ΠΈ эксцСсс) ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ исходя ΠΈΠ· Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ². БтатистичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… тСкстах. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ нСсмСщСнныС опрСдСлСния статистичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свСдСны Π² Ρ‚Π°Π±Π». 11.1.


Π’Π°Π±Π». 11.1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ статистичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

БтатистичСская функция Π€ΠΎΡ€ΠΌΡƒΠ»Π° n-ΠΉ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ (ΞΌn) βˆ‘(xi-mean)n ДиспСрсия ΞΌ2 Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ √μ2 ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ асиммСтрии ΞΌ2/ΞΌ33/2 ЭксцСсс (ΞΌ4/ΞΌ2Β²)-3

ΠœΠΎΠΌΠ΅Π½Ρ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ опрСдСляСт Π½Π΅ΠΊΠΈΠΉ способ матСматичСского описания ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ чисСл. ΠœΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой для расчСта Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π°ΠΆΠ½Ρ‹Ρ… статистичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ диспСрсии, стандартного отклонСния, коэффициСнта асиммСтрии ΠΈ эксцСсса. Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” это ΠΌΠΎΠΌΠ΅Π½Ρ‚, рассчитанный ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ срСднСго значСния, Π° Π½Π΅ нуля. Π’Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” это ΠΌΠΎΠΌΠ΅Π½Ρ‚, рассчитанный для дискрСтного Π½Π°Π±ΠΎΡ€Π° числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π° Π½Π΅ для всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Нормализованный ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” это ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΏΠΎΠ΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ стандартного отклонСния (стандартноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ рассчитываСтся ΠΊΠ°ΠΊ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°).

ΠŸΡ€ΠΎΡ‰Π΅ всСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ статистичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, опрСдСляя ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… характСризуСтся цСлочислСнной константой, я ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽ эту константу ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ шаблона. Π­Ρ‚ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ позволяСт компилятору Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивный ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ извСстно Π½Π° этапС компиляции.

Ѐункция ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° опрСдСляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ матСматичСского ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° суммы. Π’ΠΎ всСх случаях, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± этом ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅, слСдуСт ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ accumulate, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ <numeric>. БущСствуСт Π΄Π²Π΅ разновидности Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ accumulate: ΠΎΠ΄Π½Π° подсчитываСт сумму, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ operator+, Π° другая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ суммирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ. Π’Π°Ρˆ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ суммирования Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠΉ суммы ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ элСмСнта ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11.10 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ accumulate, показывая, ΠΊΠ°ΠΊ прСдоставлСнный ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11.10. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ accumulate

template<class Iter_T, class Value_T, class BinOp_T>

Iter_T accumulate(Iter_T begin, Iter_T end, Value_T value, BinOp_T op) {

 while (begin != end) {

  value = op(value, *begin++)

 }

 return value;

}

11.6. ГСнСрация случайных чисСл

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

ВрСбуСтся ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько случайных чисСл Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ [0.0, 1.0) ΠΏΡ€ΠΈ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ ΠΈΡ… распрСдСлСнии.

РСшСниС

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ C++ прСдусматриваСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ C-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ этапа исполнСния rand, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ <cstdlib>, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ случайноС число Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ RAND_MAX Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠœΠ°ΠΊΡ€ΠΎΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ RAND_MAX прСдставляСт собой максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ rand. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11.11 дСмонстрируСт ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ rand для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайных чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 11.11. ГСнСрация случайных чисСл Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ rand

#include <cstdlib>

#include <ctime>

#include <iostream>


using namespace std;


double doubleRand() {

 return double(rand()) / (double(RAND_MAX) + 1.0);

}


int main() {

 srand(static_cast<unsigned int>(clock()));

 cout << "expect 5 numbers within the interval [0.0, 1.0)" << endl;

 for (int i=0; i < 5; i++) {

  cout << doubleRand() << "\n";

 }

 cout << endl;

}

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 11.11 Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ.

expect 5 numbers within the interval [0.0, 1.0)

0.010437

0.740997

0.34906

0.369293

0.544373

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

НСобходимо ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ случайныС числа (Π² Ρ‚ΠΎΠΌ числС rand), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ псСвдослучайныС числа, Π° Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ случайныС числа, поэтому Ρ‚Π°ΠΌ, Π³Π΄Π΅ я Π³ΠΎΠ²ΠΎΡ€ΡŽ «случайноС число», я Π½Π° самом Π΄Π΅Π»Π΅ имСю Π² Π²ΠΈΠ΄Ρƒ псСвдослучайноС число.

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ rand Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Β«ΠΏΠΎΡΠ΅ΡΡ‚ΡŒΒ» (Ρ‚.Π΅. ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ srand. Π­Ρ‚ΠΎ обСспСчиваСт Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ rand Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ чисСл ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ исполнСнии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΎΡ‰Π΅ всСго ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΅ΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ clock ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° <ctime>, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏ unsigned int. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Π°Ρ инициализация Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ числа становятся ΠΌΠ΅Π½Π΅Π΅ случайными.

Ѐункция rand ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΎΠ½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа, ΠΈ эти числа ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ΅ распрСдСлСниС. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайных чисСл зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ поэтому ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ случайных чисСл нСльзя воспроизвСсти ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ систСмы ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ создаСт трудности для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ тСстировании ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅.