回應一下 Wally 在 FB 的提問:
電腦演算法,無法產生真正的隨機數,都是用所謂的「偽」隨機數。例如,假設一個公式,產生的隨機數,是利用「年月日時分秒」開根號,取小數點第10位,來產生 0~9 之值。 以我現在貼文而言:
√(20180401191503) = 4492260.1429016775052101 , 取出來的數字就是「5」 ,
過一秒後,
√(20180401191504) = 4492260.1429017888077581 , 取出來的數字就是「8」 ,
乍看從 5 跳到 8 好像沒有什麼機制,但是這是取到小數點後第 10 位了
如果只取小數點三位、五位、七位, 那是非常有可能會相同的
取 10位夠嗎? 感覺夠了,但放大個一百倍、千倍之後呢,又可能會重疊了。
而且取越多位數,計算量就越大,可能不符合效率。
將此秒數延伸,連續計算一百萬秒,或許畫出來的圖形又會呈現某種花紋也說不定。
所以,要如何讓「偽」隨機數顯得「夠亂」,是一門很大的學問(不是僅僅只有甚麼開根號取小數點下第幾位數這麼簡單的演算法)
所有號稱「夠亂」的亂數產生器,其演算法必定有漏洞,可能會在夠大的尺度下被看出端倪,那就有可能會被攻破!
業界的做法,就是外接硬體,偵測機器內的電子訊號、溫度、或是硬碟當時指針所在的位置固定抓幾個 bits 回傳。這些都是無法用演算法推論的亂數產生器,可謂是真正的隨機。
電腦演算法,無法產生真正的隨機數,都是用所謂的「偽」隨機數。例如,假設一個公式,產生的隨機數,是利用「年月日時分秒」開根號,取小數點第10位,來產生 0~9 之值。 以我現在貼文而言:
√(20180401191503) = 4492260.1429016775052101 , 取出來的數字就是「5」 ,
過一秒後,
√(20180401191504) = 4492260.1429017888077581 , 取出來的數字就是「8」 ,
乍看從 5 跳到 8 好像沒有什麼機制,但是這是取到小數點後第 10 位了
如果只取小數點三位、五位、七位, 那是非常有可能會相同的
取 10位夠嗎? 感覺夠了,但放大個一百倍、千倍之後呢,又可能會重疊了。
而且取越多位數,計算量就越大,可能不符合效率。
將此秒數延伸,連續計算一百萬秒,或許畫出來的圖形又會呈現某種花紋也說不定。
所以,要如何讓「偽」隨機數顯得「夠亂」,是一門很大的學問(不是僅僅只有甚麼開根號取小數點下第幾位數這麼簡單的演算法)
所有號稱「夠亂」的亂數產生器,其演算法必定有漏洞,可能會在夠大的尺度下被看出端倪,那就有可能會被攻破!
業界的做法,就是外接硬體,偵測機器內的電子訊號、溫度、或是硬碟當時指針所在的位置固定抓幾個 bits 回傳。這些都是無法用演算法推論的亂數產生器,可謂是真正的隨機。
_________________________
站務區內的文章我一定讀。而其他板面文章我甚少閱讀。
因此,若有事聯絡指教,麻煩請至站務區內貼文,謝謝。
✨ Twitter : http://twitter.com/destinynet
✨ 站長Facebook : http://www.facebook.com/Destiny.Pro
站務區內的文章我一定讀。而其他板面文章我甚少閱讀。
因此,若有事聯絡指教,麻煩請至站務區內貼文,謝謝。
✨ Twitter : http://twitter.com/destinynet
✨ 站長Facebook : http://www.facebook.com/Destiny.Pro

前一個議題
索引