我已经阅读了很多关于如何编写自己的随机数生成器的指南,所以我对为什么要编写自己的随机数生成器很感兴趣,因为大多数语言已经提供了生成随机数的函数:
像C++一样
srand(time(NULL));
rand();
C#
Random rand = new Random();
rand.Next(100);
和Java
Random rand = new Random();
rand.nextInt(0, 100);
我主要是在寻找使用你自己的优势。
tl:dr;我如何生成一个随机数,因为书中的方法每次都选择相同的数字。
这似乎是Swift根据苹果发布的书生成随机数的方法。
protocol RandomNumberGenerator {
func random() -> Double
}
class LinearCongruentialGenerator: RandomNumberGenerator {
var lastRandom = 42.0
let m = 139968.0
let a = 3877.0
let c = 29573.0
func random() -> Do
我使用C++已经很久了。现在,我刚刚开始在Unity3D中使用Unity3D。我几乎完成了一个应用程序,但我似乎找不到一个工作的int生成器在联合C# ( Min和Max值)。我试过以下几种方法:
r = Random.Range(min, max)
和
Random rand = new Random();
r = rand.next(min, max)
两个人都没用。我知道在C++中你使用:
r = rand() % max + min;
如果你想要一个随机数。但是统一C#的情况是什么呢?代码:
编辑
using UnityEngine;
using System.Collections;
这是我面试时遇到的问题之一。如何在不使用语言提供的方法的情况下生成随机数?(不使用Random、Math.random()、rand()等。)。我能想到的最好的办法就是使用(尽管我对这个公式的随机性一无所知)
Xn+1 = ( aXn+C ) mod m . a,m constant and C increasing by some value.
有没有其他有效的方法(在运行时和随机性方面)?