如何在C中生成随机双打?

时间:2019-04-19 18:16:14

标签: c algorithm random double srand

我必须通过解决一种自动生成非平凡输入测试数据的方法,将实验数据包含在我的代码中。考虑到我还必须考虑数字{{1} }类型?

这里有一些附加的上下文。http://mimoza.marmara.edu.tr/~msakalli/cse706_12/SkienaTheAlgorithmDesignManual.pdf的第139页(更准确的是PDF的第151页)中,我不得不解决问题4.3,但我确实需要解决。但是,我需要为此问题生成随机输入,而且由于我必须处理实数,因此很可能需要生成double个数字。问题是我不知道在生成实数时应该为这种情况选择什么范围。

4 个答案:

答案 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();
}

https://onlinegdb.com/SyqGH9PqN

答案 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