note description: "[ This class allows you to generate RANDOM_NUMBERs for use in other classes. ]" author: "JSO, Revised by AB" date: "Aug 8, 05" revision: "$1.0$" class RANDOM_NUMBER inherit RANDOM rename forth as generate, real_item as next_value export {NONE} generate end create make_real_random, make_repeatable, make_with_seed feature -- Creation make_real_random -- Create a Random Number Generator. local time_stamp: DATE_TIME current_seed: INTEGER_32 do create time_stamp.make_now current_seed := time_stamp.second + time_stamp.day + time_stamp.year set_seed (current_seed) start end make_repeatable -- Create a Random Number Generator with a repeatable sequence. do set_seed (My_seed) start ensure is_repeatable: seed = My_seed end make_with_seed (s: INTEGER_32) -- Create a Random Number Generator with a repeatable seed. require seed_positive: s > 0 do set_seed (s) start ensure seed_set: seed = s end feature -- Basic Operations integer_value_between (low_limit: INTEGER_32; high_limit: INTEGER_32): INTEGER_32 -- This feature allows you to generate a random integer -- between two integers eg. 4 and 8 or 1 and 10. require low_limit >= 0 high_limit >= low_limit local r: REAL_32 do generate r := next_value * (high_limit - low_limit + 1).to_real Result := r.truncated_to_integer + low_limit ensure result_within_bounds: Result >= low_limit and Result <= high_limit index_incremented: index = old index + 1 end real_value_between (low_limit: INTEGER_32; high_limit: INTEGER_32): REAL_32 -- This feature allows you to generate a random real -- between two integers require low_limit >= 0 high_limit >= low_limit local r: REAL_32 do generate r := next_value * (high_limit - low_limit).to_real Result := r + low_limit.to_real ensure result_within_bounds: Result >= low_limit.to_real and Result <= high_limit.to_real index_incremented: index = old index + 1 end feature {NONE} My_seed: INTEGER_32 = 131313 -- DO NOT CHANGE! end -- class RANDOM_NUMBER
Generated by ISE EiffelStudio