4.27.2.6 Arithmetic Functions
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • Built-in Predicates
        • Arithmetic
          • General purpose arithmetic
            • Arithmetic Functions
              • -/1
              • +/1
              • +/2
              • -/2
              • */2
              • //2
              • mod/2
              • rem/2
              • ///2
              • div/2
              • rdiv/2
              • gcd/2
              • lcm/2
              • abs/1
              • sign/1
              • copysign/2
              • nexttoward/2
              • roundtoward/2
              • max/2
              • min/2
              • ./2
              • random/1
              • random_float/0
              • round/1
              • integer/1
              • float/1
              • rational/1
              • rationalize/1
              • numerator/1
              • denominator/1
              • float_fractional_part/1
              • float_integer_part/1
              • truncate/1
              • floor/1
              • ceiling/1
              • ceil/1
              • >>/2
              • <</2
              • \//2
              • /\/2
              • xor/2
              • \/1
              • sqrt/1
              • sin/1
              • cos/1
              • tan/1
              • asin/1
              • acos/1
              • atan/1
              • atan2/2
              • atan/2
              • sinh/1
              • cosh/1
              • tanh/1
              • asinh/1
              • acosh/1
              • atanh/1
              • log/1
              • log10/1
              • exp/1
              • **/2
              • ^/2
              • powm/3
              • lgamma/1
              • erf/1
              • erfc/1
              • pi/0
              • e/0
              • epsilon/0
              • inf/0
              • nan/0
              • cputime/0
              • eval/1
              • msb/1
              • lsb/1
              • popcount/1
              • getbit/2
    • Packages
Availability:Arithmetic function (see is/2)
random(+IntExpr)
Evaluate to a random integer i for which 0 =< i < IntExpr. The system has two implementations. If it is compiled with support for unbounded arithmetic (default) it uses the GMP library random functions. In this case, each thread keeps its own random state. The default algorithm is the Mersenne Twister algorithm. The seed is set when the first random number in a thread is generated. If available, it is set from /dev/random.125On Windows the state is initialised from CryptGenRandom(). Otherwise it is set from the system clock. If unbounded arithmetic is not supported, random numbers are shared between threads and the seed is initialised from the clock when SWI-Prolog was started. The predicate set_random/1 can be used to control the random number generator.

Warning! Although properly seeded (if supported on the OS), the Mersenne Twister algorithm does not produce cryptographically secure random numbers. To generate cryptographically secure random numbers, use crypto_n_random_bytes/2 from library library(crypto) provided by the ssl package.