精确到drand48

时间:2012-02-07 09:45:29

标签: c++

如何在C ++中为drand48()添加精度? 我在以下函数中使用它:

double x = drand48()%1000+1;

生成1000以下的数字。 但后来我得到了这个错误:

error: invalid operands of types ‘double’ and ‘int’ to binary ‘operator%’

使用时不会发生这种情况:

double x = rand()%1000+1;

为什么rand()和drand48()有什么区别?

3 个答案:

答案 0 :(得分:8)

drand48会返回区间[0.0, 1.0)中的数字。你在找1到1000之间的数字吗?在这种情况下,您需要乘以999并添加1.

实际上,你在期待什么?

答案 1 :(得分:5)

drand48()返回double,而rand()返回int

此外,drand48()会返回在[0.0, 1.0)之间分配的值,因此您的公式需要更改:

double x = drand48() * 1000.0 + 1; // floating-point values from [1, 1001)

double x = (int)(drand48() * 1000.0) + 1; // integer values from [1, 1000]

您可以按上述方式缩放drand48()的结果,也可以将lrand48()与现有公式一起使用。

答案 2 :(得分:3)

drand48返回0.0到1.0范围内的double。您希望将其乘以您想要生成的范围。 double x = drand48() * 1000.0