What is the most efficient and portable way to generate a random random in [0,1] in Cython? One approach is to use INT_MAX and rand() from the C library: from libc.stdlib cimport rand cdef extern from "limits.h": int INT_MAX cdef float randnum = rand() / float(INT_MAX) Is it OK to use INT_MAX in this way? I noticed that it's quite different from the constant you get from Python's max int: import sys print INT_MAX print sys.maxint yields: 2147483647 (C max int) 9223372036854775807 (python max int) Which is the right "normalization" number for rand()? EDIT additionally, how can the random seed be set (e.g. seeded based on current time) if one uses the C approach of calling rand() from libc? Continue reading...