C# 在最小值和最小值处随机;max values,照亮我

C# 在最小值和最小值处随机;max values,照亮我,c#,C#,当我试图为自己编写基本的彩票应用程序时(请注意,我真的是编程新手,尤其是c#),StackOverflow上的一个家伙对我说 rnd.Next(1, 50 * 7) % 50 // Randoming like that will be increase to chance of getting 1 and 49 rnd.Next(1, 50 ) // instead of this 我真的很想知道我们如何测试它?我们能依靠这些测试吗?请告诉我最后一个示例将得到1到49(包括)之间的均匀分

当我试图为自己编写基本的彩票应用程序时(请注意,我真的是编程新手,尤其是c#),StackOverflow上的一个家伙对我说

rnd.Next(1, 50 * 7) % 50  // Randoming like that will be increase to chance of getting 1 and 49
rnd.Next(1, 50 ) // instead of this 

我真的很想知道我们如何测试它?我们能依靠这些测试吗?请告诉我

最后一个示例将得到1到49(包括)之间的均匀分布。也就是说,1和49之间(包括1和49)的任何数字都有相同的机会

第一个例子要复杂得多。它将首先创建1到349之间的任何数字。模50将数字映射到区间0-49(包括0和49)

现在,我们引入了得到0的可能性——如果随机数是50、100、150、200、250或300。 我们也可以通过N+0、N+50、N+100、N+150、N+200、N+250、N+300得到数字1-49

也就是说,6次机会得到0,7次机会得到任何其他数字


结论是,第一个示例将给出一个介于0-49(含)之间的随机数,0的概率比其他数字稍小。

最后一个示例将得到1和49(含)之间的均匀分布。也就是说,1和49之间(包括1和49)的任何数字都有相同的机会

第一个例子要复杂得多。它将首先创建1到349之间的任何数字。模50将数字映射到区间0-49(包括0和49)

现在,我们引入了得到0的可能性——如果随机数是50、100、150、200、250或300。 我们也可以通过N+0、N+50、N+100、N+150、N+200、N+250、N+300得到数字1-49

也就是说,6次机会得到0,7次机会得到任何其他数字


结论是,第一个示例将给出一个介于0-49(含)之间的随机数,0的概率比其他数字稍小。

首先,您可以从第一个表达式返回
0
,而从第二个表达式返回不到。我们如何才能得到0?我们在1和49之间进行随机分组,并将其与7和模式相乘50@1342想象一下rnd.Next(150*7)返回100。那么,100除以50(即
100%5
)的余数是0。哦,顺便说一句:
rnd.Next(1,50)
返回1到49之间的数字,而不是1到50之间的数字。哦,我以为我们是将随机值相乘,然后再相乘%50:)但我认为没有逻辑。除非你知道你在做什么,否则我不会建议你取随机数的模。它几乎总是会使结果产生偏差。首先,你可以从第一个表达式返回
0
,而从第二个表达式返回不到。我们如何才能得到0?我们在1和49之间进行随机分组,并将其与7和模式相乘50@1342想象一下rnd.Next(150*7)返回100。那么,100除以50(即
100%5
)的余数是0。哦,顺便说一句:
rnd.Next(1,50)
返回1到49之间的数字,而不是1到50之间的数字。哦,我以为我们是将随机值相乘,然后再相乘%50:)但我认为没有逻辑。除非你知道你在做什么,否则我不会建议你取随机数的模。它几乎总是会使结果产生偏差。正确的分析(我也写了一个快速程序来测试它,这与你的分析一致)。正确的分析(我也写了一个快速程序来测试它,这与你的分析一致)。