⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tryrand5.cpp

📁 随机数发生器C++写的
💻 CPP
字号:
#define WANT_STREAM#define WANT_TIME#include "include.h"#include "newran.h"#include "tryrand.h"#ifdef use_namespaceusing namespace NEWRAN;#endif// ****** simple tests of Poisson, binomial and log normal random number generators ******void TestVariPoisson(Real mu, int N){   VariPoisson VP;                  // Poisson RNG   Real sum = 0.0, sumsq = 0.0;   for (int i = 1; i <= N; ++i)      { int x = VP.iNext(mu); Real d = x - mu; sum += d; sumsq += d * d; }   cout      << " " << setw(10) << setprecision(5) << mu      << " " << setw(15) << setprecision(10) << mu + sum / N      << " " << setw(15) << setprecision(10) << (sumsq - sum * sum / N) / (N - 1) << endl;}void TestVariBinomial(int n, Real p, int N){   VariBinomial VB;                // Binomial RNG   Real sum = 0.0, sumsq = 0.0;   Real mu = n * p;   for (int i = 1; i <= N; ++i)      { int x = VB.iNext(n, p); Real d = x - mu; sum += d; sumsq += d * d; }   cout      << " " << setw(10) << setprecision(5) << n      << " " << setw(10) << setprecision(5) << p      << " " << setw(10) << setprecision(5) << mu      << " " << setw(10) << setprecision(5) << mu * (1.0 - p)      << " " << setw(15) << setprecision(10) << mu + sum / N      << " " << setw(15) << setprecision(10) << (sumsq - sum * sum / N) / (N - 1) << endl;}void TestVariLogNormal(double mean, double sd, int N){   VariLogNormal VLN;   Real sum = 0.0, sumsq = 0.0;   for (int i = 1; i <= N; ++i)   {      Real x = VLN.Next(mean, sd);      Real d = x - mean; sum += d; sumsq += d * d;   }   cout      << " " << setw(10) << setprecision(5) << mean      << " " << setw(10) << setprecision(5) << sd      << " " << setw(10) << setprecision(5) << sd * sd      << " " << setw(15) << setprecision(10) << mean + sum / N      << " " << setw(15) << setprecision(10) << (sumsq - sum * sum / N) / (N - 1) << endl;}void test5(int N){   cout << endl << endl;   cout << "Testing VariPoisson" << endl;   cout << " - columns 2 (mean) and 3 (variance) should be close to column 1" << endl;   TestVariPoisson(0.25, N);   TestVariPoisson(1, N);   TestVariPoisson(4, N);   TestVariPoisson(10, N);   TestVariPoisson(20, N);   TestVariPoisson(30, N);   TestVariPoisson(39.5, N);   TestVariPoisson(40, N);   TestVariPoisson(50, N);   TestVariPoisson(59.5, N);   TestVariPoisson(60, N);   TestVariPoisson(60.5, N);   TestVariPoisson(99.5, N);   TestVariPoisson(100, N);   TestVariPoisson(100.5, N);   TestVariPoisson(199.5, N);   TestVariPoisson(200, N);   TestVariPoisson(200.5, N);   TestVariPoisson(299.5, N);   TestVariPoisson(300, N);   TestVariPoisson(300.5, N);   TestVariPoisson(399.5, N);   TestVariPoisson(400, N);   TestVariPoisson(400.5, N);   TestVariPoisson(500, N);   TestVariPoisson(10000, N);   TestVariPoisson(10000.5, N);   TestVariPoisson(100000, N);   TestVariPoisson(100000.5, N);   TestVariPoisson(10000000, N);   TestVariPoisson(10000000.5, N);   cout << endl;   cout << "Testing VariBinomial" << endl;   cout << " - columns 5 (mean) and 6 (variance) should be close to columns 1 and 4" << endl;   TestVariBinomial(1, 0.2, N);   TestVariBinomial(2, 0.1, N);   TestVariBinomial(5, 0.35, N);   TestVariBinomial(20, 0.2, N);   TestVariBinomial(50, 0.5, N);   TestVariBinomial(100, 0.4, N);   TestVariBinomial(200, 0.2, N);   TestVariBinomial(500, 0.3, N);   TestVariBinomial(1000, 0.19, N);   TestVariBinomial(1000, 0.21, N);   TestVariBinomial(10000, 0.4, N);   TestVariBinomial(1000000, 0.1, N);   TestVariBinomial(1000000, 0.5, N);   TestVariBinomial(1, 0.7, N);   TestVariBinomial(2, 0.6, N);   TestVariBinomial(5, 0.9, N);   TestVariBinomial(20, 0.55, N);   TestVariBinomial(50, 0.9, N);   TestVariBinomial(100, 0.99, N);   TestVariBinomial(200, 0.51, N);   TestVariBinomial(500, 0.7, N);   TestVariBinomial(1000, 0.81, N);   TestVariBinomial(1000, 0.79, N);   TestVariBinomial(10000, 0.9, N);   TestVariBinomial(1000000, 0.55, N);   TestVariBinomial(1000000, 0.7, N);   cout << endl;   cout << "Testing VariLogNormal" << endl;   cout << " - columns 4 (mean) and 5 (variance) should be close to columns 1 and 3" << endl;   TestVariLogNormal(0.25, 0.5, N);   TestVariLogNormal( 0.5, 1.5, N);   TestVariLogNormal( 1.5, 2.5, N);   TestVariLogNormal( 2.0, 1.0, N);   cout << endl;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -