冷静に考えると、乱数って何だ?

C言語とかPCの中身を深く知るうちにちょっとした疑問が頭に出てきた。
 
「乱数って何だ?」
 
人間だったらテキトーな数字を言えば、それが乱数になるけど、
コンピュータにテキトーという概念はない。
つまり、テキトーという概念をプログラム化しないと、
テキトーな数を教えてはくれない。
 
じゃあ、どうやってやるんだ?
 
色々、あるらしいけど
線形合同法 - Wikipediaをプログラミングしてみた。
(irb)

def random(a, b, c)
  @ri = (a*@ri+b)%c
  return @ri
end

@ri = 1

random(5, 3, 8)
=> 0
random(5, 3, 8)
=> 3
random(5, 3, 8)
=> 2
random(5, 3, 8)
=> 5
random(5, 3, 8)
=> 4
random(5, 3, 8)
=> 7
random(5, 3, 8)
=> 6
random(5, 3, 8)
=> 1
random(5, 3, 8)
=> 0

この5,3,8の引数で繰り返すと、あるパターンが8回繰り返される。
引数のa, b, cが8回のパターンの元になっていて、
ここを現在の時間のようなパターンのあるものを、a,b,cに設定することで
パターンとパターンがミックスされていかにも乱数っぽく見える。
 
なので、PCで作られる乱数は擬似乱数と呼ばれていて、本当の乱数ではないそうな。
なるほど。なっとく。