On Fri, 4 Aug 2000, Olivier Fliegans wrote: > I would like to generate some integer numbers between 1 and Nt. > Usually I use the following piece of code > > call random_number(tmp_ran) > i=floor(tmp_ran*real(Nt,4)) + 1 > > Unfortunately, under the Lahey compiler (5.5-Linux) this gives me > numbers between 1 and Nt+1, in other words tmp_ran can be equal to 1. > (which AFAIK is not standard conforming). > > Any suggestion? > Thanks in advance The standard (and simplest) way, used in all Monte Carlo programs I know, is: i = INT(tmp_ran*Nt) + 1 I don't know if the standard requires the range of tmp_ran to include 1, but it would be reasonable to be so. Including 0 is dangerous, because it can be a source of exceptions (it is quite common to sample from an exponential distribution by taking the log of a random number). Anyway, it is very easy to convert a random number sampled in the interval ]0,1] to one in the interval [0,1[ (and viceversa): tmp_ran = 1.0 - tmp_ran Alberto -------------------------------------------------- Alberto Fasso' Stanford Linear Accelerator Center Radiation Physics Dept. ms 48 2575 Sand Hill Road Menlo Park, CA 94025 Tel. (1 650) 926 4062 Fax: (1 650) 926 3569 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%