📄 mkfiles.cpp
字号:
// mkfiles.cpp,v 1.1 2003/11/25 07:33:10 kobica Exp
#include "ace/OS.h"
#include "ace/Get_Opt.h"
#include <math.h>
static float gammln (float xx);
static float poidev (float xm);
int main (int argc, char *argv[])
{
ACE_Get_Opt options (argc, argv, "m:s:x:n:");
// m -- median file size in kB
// x -- maximum file size in kB
// n -- number of files
long median = 8;
long maximum = 1024;
long number = 1000;
int c;
while ((c = options ()) != -1)
{
switch (c)
{
case 'm':
median = ACE_OS::atoi (options.optarg);
break;
case 'x':
maximum = ACE_OS::atoi (options.optarg);
break;
case 'n':
number = ACE_OS::atoi (options.optarg);
break;
default:
break;
}
}
char filename[1024];
const char *seventyfive_bytes = "\
01010101010101010101010101010101010101010101010101010101010101010101010101\n\
";
int seen_max = 0;
long i;
for (i = 0; i < number; i++)
{
long size = 0;
float p = ::floor (::pow (2, poidev (::log (2 * median)/::log (2)) - 1));
if (p > maximum)
p = maximum;
p *= 1024;
if (p < 1.0)
p = 1.0;
size = (long) p;
if (i == (number - 1))
if (! seen_max)
size = maximum * 1024;
else
seen_max = (size == (maximum * 1024));
::sprintf (filename, "file%011ld.html", i);
FILE *fp = ::fopen (filename, "w+b");
while (size > 75)
{
fprintf (fp, "%s", seventyfive_bytes);
size -= 75;
}
if (size > 15)
{
fprintf (fp, "%0*.0f\n", (int) (size - 1), p);
}
else
{
fprintf (fp, "%015.0f\n", p + 16 - size);
}
fclose (fp);
}
return 0;
}
static float
gammln (float xx)
{
double x, y, tmp, ser;
static const double cof[6] = { 76.18009172947146,
-86.50532032941677,
24.01409824083091,
-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5 };
int j;
y = x = xx;
tmp = x + 5.5;
tmp -= (x+0.5) * ::log (tmp);
ser = 1.000000000190015;
for (j = 0; j < 6; j++)
ser += cof[j]/++y;
return -tmp + ::log (2.5066282746310005 * ser / x);
}
static float
poidev (float xm)
{
static const double PI = 3.141592654;
static float sq, alxm, g, oldm = -1.0;
float em, t, y, fem;
if (xm < 2.0)
{
if (xm != oldm)
{
oldm = xm;
g = ::exp (-xm);
}
em = -1.0;
t = 1.0;
do
{
++em;
t *= (1.0 + ::rand ())/RAND_MAX;
}
while (t > g);
}
else
{
if (xm != oldm)
{
oldm = xm;
sq = ::sqrt (2.0 + xm);
alxm = log (xm);
g = xm * alxm - gammln (xm + 1.0);
}
do
{
do
{
y = ::tan (PI * (1.0 + ::rand ())/RAND_MAX);
em = sq * y + xm;
}
while (em < 0.0);
fem = ::floor (em);
t = 0.9 * (1.0 + y * y) * ::exp (fem * alxm - gammln (fem + 1.0) - g);
}
while ((1.0 + ::rand ())/RAND_MAX > t);
}
return em;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -