如何在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()有什么区别?
答案 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