Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何复制C++;另一种语言的兰德公司';s随机函数?_C++_Math_Random_Modulus - Fatal编程技术网

C++ 如何复制C++;另一种语言的兰德公司';s随机函数?

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()返回一个

我在公司使用内部语言,他们只有返回0到1之间的浮点值的
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) )