random.alc 550 B

12345678910111213141516171819202122232425
  1. Integer seed = 1
  2. Float function random():
  3. // Linear Congruential Generator
  4. Integer a
  5. Integer c
  6. Integer m
  7. // Parameters from Numerical Recipes
  8. a = 1664525
  9. c = 1013904223
  10. m = 4294967296
  11. // Do the generation and update the seed
  12. seed = integer_mod(a * seed + c, m)
  13. // The seed is the new value
  14. return seed / m
  15. Integer function random_interval(a : Integer, b : Integer):
  16. return cast_f2i(rand * (b - a) + a)
  17. Element function random_choice(list : Element):
  18. return read_edge_dst(read_out(list, random_interval(0, read_nr_out(list) - 1)))