我必须通过解决一种自动生成非平凡输入测试数据的方法,将实验数据包含在我的代码中。考虑到我还必须考虑数字{{1} }类型?
这里有一些附加的上下文。http://mimoza.marmara.edu.tr/~msakalli/cse706_12/SkienaTheAlgorithmDesignManual.pdf的第139页(更准确的是PDF的第151页)中,我不得不解决问题4.3,但我确实需要解决。但是,我需要为此问题生成随机输入,而且由于我必须处理实数,因此很可能需要生成double
个数字。问题是我不知道在生成实数时应该为这种情况选择什么范围。
答案 0 :(得分:3)
要获得<amp-img tabindex="0" role="button" class="hero-carousel-image amp-carousel-slide i-amphtml-element i-amphtml-layout-responsive i-amphtml-layout-size-defined i-amphtml-layout" layout="responsive" height="260" width="260" data-amp-bind-src="productState.currentHeroImg" i-amphtml-binding="" src="--REDACTED--" on="tap:hero-zoom-lightbox" i-amphtml-layout="responsive" aria-hidden="false">
<i-amphtml-sizer style="padding-top: 100%;"></i-amphtml-sizer>
<img itemprop="image" decoding="async" src="--REDACTED--" class="i-amphtml-fill-content i-amphtml-replaced-content">
</amp-img>
范围内的随机double
,并且出现任何[-DBL_MAX ....DBL_MAX]
的机会均等,请随机填充double
。拒绝非限制性的。
double
在每次循环迭代中通常只生成8位的情况下,有些线性效率低。
答案 1 :(得分:2)
例如0到最大:
double pseudorand(double max)
{
srand((unsigned) time(0));
return (max / RAND_MAX) * rand();
}
或从-max到max
double pseudorand(double max)
{
srand((unsigned) time(0));
return (rand() > RAND_MAX / 2 ? -1 : 1) *(max / RAND_MAX) * rand();
}
答案 2 :(得分:1)
C的rand()
返回一个整数,通常为32位。双精度数有53位尾数。因此,要创建一个好的随机双精度数,您将必须生成53个随机位。尝试这样的事情:
double rd() {
uint64_t r53 = ((uint64_t)(rand()) << 21) ^ (rand() >> 2);
return (double)r53 / 9007199254740991.0; // 2^53 - 1
}
这将返回间隔[0,1]的双精度值
答案 3 :(得分:0)
如何在C语言中生成随机双打?
没有风吹草动,但会让您入门:
double drand ( double low, double high )
{
srand((unsigned int)clock());
return ( (double)rand() * ( high - low ) ) / (double)RAND_MAX + low;
}
对于low = 10.0;
和high = 1000.0
对该函数的调用将生成一个值:
10 >= value <= 1000.0
改编自 this example 。