C++ 如何复制C++;另一种语言的兰德公司';s随机函数?
我在公司使用内部语言,他们只有返回0到1之间的浮点值的C++ 如何复制C++;另一种语言的兰德公司';s随机函数?,c++,math,random,modulus,C++,Math,Random,Modulus,我在公司使用内部语言,他们只有返回0到1之间的浮点值的Random() 我需要用C++代码编写一个使用 RAND()的代码:< /P> 我查看了文档,但不确定如何使用我的Random()生成一个介于0和I+1之间的数字,这就是上面的代码所做的,对吗 我尝试将I+1与Random()相乘,但没有得到相同的结果,这就是为什么我不确定我所做的是否正确 由于不同的随机函数,我期望结果之间存在差异,但我仍然希望确保我正确地翻译了它。您需要将random()与I相乘,而不是I+1 C++rand()返回一个
Random()
我需要用C++代码编写一个使用<代码> RAND()的代码:< /P> 我查看了文档,但不确定如何使用我的
Random()
生成一个介于0和I+1
之间的数字,这就是上面的代码所做的,对吗
我尝试将I+1
与Random()
相乘,但没有得到相同的结果,这就是为什么我不确定我所做的是否正确
由于不同的随机函数,我期望结果之间存在差异,但我仍然希望确保我正确地翻译了它。您需要将
random()
与I
相乘,而不是I+1
C++
rand()
返回一个介于0
和rand_MAX
之间的整数,但是您的Random()
返回一个介于0
和1
之间的浮点值,因此将Random()
的输出与i
相乘,并取结果的整数部分将得到[0,i]中的整数
这是rand()%(i+1)
给出的。您需要将Random()
与i
相乘,而不是i+1
C++rand()
返回一个介于0
和rand_MAX
之间的整数,但是您的Random()
返回一个介于0
和1
之间的浮点值,因此将Random()
的输出与i
相乘,并取结果的整数部分将得到[0,i]中的整数
这是rand()%(i+1)
给出的值。rand()给你一个介于0和rand_MAX之间的数字,在应用mod运算符后,你会得到一个介于0和i(包括i)之间的数字
要对Random()执行相同的操作,您需要乘以(i+1),然后取其底数(向下四舍五入):
这将根据需要为您提供从0到i的数字(包括栅栏柱) Rand()为您提供一个介于0和Rand_MAX之间的数字,在应用mod运算符后,您将得到一个介于0和i(包括i)之间的数字
要对Random()执行相同的操作,您需要乘以(i+1),然后取其底数(向下四舍五入):
这将根据需要为您提供从0到i的数字(包括栅栏柱) 谢谢,我不明白为什么原始代码使用
I+1
?它从最后一个索引开始向后循环,所以i+1不会给出一个大于最大索引(num_items-1)的索引吗?(a+ve int)%N
返回一个介于0
和N-1
(两者都包括在内)之间的数字。如果原来所说的rand()%(i+1),那么您肯定要用Random()*(i+1)替换它。我愿意证明Random()会产生一个范围为[0,1]的数字,所以乘以I会产生范围[0,I),截断为int会得到[0,I-1]。@rici,如果你不确定Random()是否
可以返回1.0,也可以不返回1.0。你可以用i+0.999999999999
来代替i+1
。谢谢,我不明白为什么原始代码使用i+1
?它从最后一个索引开始向后循环,所以i+1不会给出大于最大索引的索引(num_items-1)?(a+ve int)%N
返回一个介于0
和N-1
之间的数字(包括两者)。如果原始值为rand()%(i+1),则您肯定要将其替换为Random()*(i+1)。我愿意指出,Random()生成范围[0,1]内的数字,因此乘以i生成范围[0,i],截断为int将导致[0,i-1]。@rici,如果您不确定Random()
是否可以返回1.0,您可以用i+0.999999999999
而不是i+1
。
int b = rand() % (i+1);
b = floor( Random() * (i+1) )