Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def generate(megs)
- prng = uheprng
- mb = 1024**2
- count = megs * mb
- block = Array.new
- stream = File.new("uheprng.bin", "w")
- Kernel.printf("Running uheprng.rb to generate %d megabytes of pseudo-random data...\n", megs)
- count.times do |i|
- block.push(prng.call(0x100))
- (i+1)%16384 == 0 or next
- stream.write(block.pack("C*"))
- block.clear
- Kernel.printf("%s%.2f mb, (%.1f%%)", 8.chr*22, ((i+1).fdiv(mb)), ((i+1).fdiv(count)*100))
- end
- stream.close
- Kernel.printf("\n\n--- Done!! ---\n")
- end
- def uheprng
- size = 48
- c = 1
- pos = size
- state = mash(size, 0xefc8249d)
- rawprng = proc do
- (pos+=1) >= size and pos = 0
- t = 1768863 * state[pos] + c * 2.3283064365386963e-10 # 2^-32
- state[pos] = t - (c = t.to_i)
- end
- proc do |range|
- (range * (rawprng.call + (rawprng.call * 0x200000).to_i * 1.1102230246251565e-16)).floor # 2^-53
- end
- end
- def mash(count, n)
- count.times.map do
- Kernel.rand.to_s.bytes do |b|
- n += b
- h = 0.02519603282416938 * n
- n = h.to_i
- h -= n
- h *= n
- n = h.to_i
- h -= n
- n += h * 0x100000000 # 2^32
- end
- n.to_i * 2.3283064365386963e-10 # 2^-32
- end
- end
- generate(ARGV.shift.to_i)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement