java 随机数种子_Java--随机数和随机数种子(转)
在計算機中并沒有一個真正的隨機數發生器,但是可以做到使產生的數字重復率很低,這樣看起來好象是真正的隨機數,實現這一功能的程序叫偽隨機數發生器。
有關如何產生隨機數的理論有許多,如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什么方法實現隨機數發生器,都必須給它提供一個名為“種子”的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。“種子”的值通常是用快速計數寄存器或移位寄存器來生成的。
下面講一講在C語言里所提供的隨機數發生器的用法。現在的C編譯器都提供了一個基于ANSI標準的偽隨機數發生器函數,用來生成隨機數。它們就是rand()和srand()函數。這二個函數的工作過程如下:
1) 首先給srand()提供一個種子,它是一個unsigned int類型,其取值范圍從0~65535;
2) 然后調用rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到32767之間)
3) 根據需要多次調用rand(),從而不間斷地得到新的隨機數;
4) 無論什么時候,都可以給srand()提供一個新的種子,從而進一步“隨機化”rand()的輸出結果。
這個過程看起來很簡單,問題是如果你每次調用srand()時都提供相同的種子值,那么,你將會得到相同的隨機數序列,這時看到的現象是沒有隨機數,而每一次的數都是一樣的了。例如,在以17為種子值調用srand()之后,在首次調用rand()時,得到隨機數94。在第二次和第三次調用rand()時將分別得到26602和30017,這些數看上去是很隨機的(盡管這只是一個很小的數據點集合),但是,在你再次以17為種子值調用srand()后,在對于rand()的前三次調用中,所得的返回值仍然是在對94,26602,30017,并且此后得到的返回值仍然是在對rand()的第一批調用中所得到的其余的返回值。因此只有再次給srand()提供一個隨機的種子值,才能再次得到一個隨機數。
總結
以上是生活随笔為你收集整理的java 随机数种子_Java--随机数和随机数种子(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java获取文件列表_java获取指定目
- 下一篇: java 提取url参数_Java提取U