Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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
“你是怎么做的?”;“随机”;不同语言(即Java和C+;+;)的生成器是否比较?_Java_C++_Random - Fatal编程技术网

“你是怎么做的?”;“随机”;不同语言(即Java和C+;+;)的生成器是否比较?

“你是怎么做的?”;“随机”;不同语言(即Java和C+;+;)的生成器是否比较?,java,c++,random,Java,C++,Random,尽管标题很奇怪,我还是想问一个合理的问题:哪个方法生成的数字更随机:Java的random()类还是Math.random(),或者C++的rand() 我听说PHP的rand()非常糟糕,也就是说,如果你映射它的结果,你可以清楚地看到一个模式;遗憾的是,我不知道如何用C++或java绘制地图。 另外,出于兴趣,C#?PHP使用种子。如果种子在两个不同的时间相同,rand()函数将始终输出相同的内容。(例如,这对代币来说可能非常糟糕)。 我不知道C++和java,但是没有真正的随机性,这使得质量

尽管标题很奇怪,我还是想问一个合理的问题:哪个方法生成的数字更随机:Java的
random()
类还是
Math.random()
,或者C++的
rand()

我听说PHP的
rand()
非常糟糕,也就是说,如果你映射它的结果,你可以清楚地看到一个模式;遗憾的是,我不知道如何用C++或java绘制地图。
另外,出于兴趣,C#?

PHP使用种子。如果种子在两个不同的时间相同,rand()函数将始终输出相同的内容。(例如,这对代币来说可能非常糟糕)。
我不知道C++和java,但是没有真正的随机性,这使得质量难以评估。安全性不依赖于这些函数。

PHP使用种子。如果种子在两个不同的时间相同,rand()函数将始终输出相同的内容。(例如,这对代币来说可能非常糟糕)。
我不知道C++和java,但是没有真正的随机性,这使得质量难以评估。安全性不依赖于这些函数。

< P> java和C++都生成伪随机数,它们都是:

  • 足以胜任任何非统计学家或密码学家的任务(a);或
  • 不幸的是,这两类人都无法胜任
老实说,除非您属于这些类中的一类,否则伪随机数生成器是可以使用的

java也有<代码> SoeSeriDANOM < /C> >,它提供了密码类非决定论(我不能评论该论证的准确性),C++现在比任意的代码> RAND()/<代码>具有更广泛的随机数生成能力。 特定的操作系统可能为随机数生成器提供熵源,例如在Windows下或在Linux下读取

/dev/random
。或者,您可以通过使用随机事件(如用户输入计时)来增加熵



(a)实际上可能包含其他不是统计学家或密码者的工作类型:-)< / P> < P> java和C++都生成伪随机数,它们都是:

  • 足以胜任任何非统计学家或密码学家的任务(a);或
  • 不幸的是,这两类人都无法胜任
老实说,除非您属于这些类中的一类,否则伪随机数生成器是可以使用的

java也有<代码> SoeSeriDANOM < /C> >,它提供了密码类非决定论(我不能评论该论证的准确性),C++现在比任意的代码> RAND()/<代码>具有更广泛的随机数生成能力。 特定的操作系统可能为随机数生成器提供熵源,例如在Windows下或在Linux下读取

/dev/random
。或者,您可以通过使用随机事件(如用户输入计时)来增加熵



(a) 实际上可能包含非统计学家或密码学家的其他工作类型的痕迹:-)

java.util.Random
(由
Math.Random()
内部使用)使用a,这是一个相当弱的RNG,但足以处理简单的事情。对于重要的应用程序,应该使用
java.security.SecureRandom


< >我认为C或C++语言规范不允许使用算法<代码> RAND()/<代码>,但大多数实现也使用LCG。C++11添加了新的API,可以产生更高质量的随机性。

java.util.Random
(由
Math.Random()
内部使用)使用a,这是一个相当弱的RNG,但对于简单的事情来说已经足够了。对于重要的应用程序,应该使用
java.security.SecureRandom


< >我认为C或C++语言规范不允许使用算法<代码> RAND()/<代码>,但大多数实现也使用LCG。C++11添加了新的API,可以产生更高质量的随机性。

我不知道有哪种语言的随机数是真正随机的-我肯定存在这样的事情,但一般来说,它是“你插入一个种子,然后得到种子给出的序列”。如果你想制作一个简单的“shootem up”游戏、基本扑克游戏、家用轮盘赌模拟器等,这很好。但是如果你的钱依赖于游戏的真正随机性(例如,你根据特定序列的结果发放钱),或者你的秘密文件依赖于你的随机数,那么你肯定需要一些其他的机制来寻找随机数


还有一些“真”随机数生成器。它们不提供种子,所以基于上次获得的数量的可预测性很低。我并不是说它是零,因为我不确定你能不能从一个未使用的射频、放射性衰变或任何生成真实随机数的最新方法的无线电波取样中得到它

我不知道有哪种语言中的随机数是真正随机的——我肯定存在这样一种情况,但一般来说,它是“你插上一颗种子,你就得到了种子给出的序列”。如果你想制作一个简单的“shootem up”游戏、基本扑克游戏、家用轮盘赌模拟器等,这很好。但是如果你的钱依赖于游戏的真正随机性(例如,你根据特定序列的结果发放钱),或者你的秘密文件依赖于你的随机数,那么你肯定需要一些其他的机制来寻找随机数

还有一些“真”随机数生成器。它们不提供种子,所以基于上次获得的数量的可预测性很低。我并不是说它是零,因为我不确定你能不能从一个未使用的射频、放射性衰变或任何生成真实随机数的最新方法的无线电波取样中得到它。