如何在另一种语言的随机函数中复制C ++ rand?

时间:2012-10-08 03:02:14

标签: c++ math random modulus

我在公司使用内部语言,他们只有Random(),返回0到1之间的浮点数。

我需要移植一段使用rand()

的C ++代码
int b = rand() % (i+1);

我查看了文档,但不确定如何使用Random()生成介于0和i+1之间的数字,这就是上面的代码所做的,对吧?

我尝试将i+1Random()相乘,但没有得到相同的结果,这就是为什么我不确定我所做的是否正确。

我期望由于不同的随机函数导致结果之间的差异,但我仍然希望确保我正确地翻译它。

2 个答案:

答案 0 :(得分:4)

您需要将Random()i相乘,而不是i+1

C ++ rand()返回0RAND_MAX之间的整数,但您的Random()会在01之间返回一个浮点数,因此乘以使用Random()输出i并获取结果的整数部分将为[0,i]提供rand() %(i+1)给出的整数。

答案 1 :(得分:2)

Rand()给出一个介于0和RAND_MAX之间的数字,在应用mod运算符后,你得到一个介于0和i之间的数字(包括i)。

要对Random()执行相同的操作,您需要乘以(i + 1),然后再调整(向下舍入):

b = floor( Random() * (i+1) ) 

这将根据需要为您提供从0到i(包括围栏帖子)的数字。