IMSL C Stat Library
random_cauchy
Generates pseudorandom numbers from a Cauchy distribution.
Synopsis
#include <imsls.h>
float *imsls_f_random_cauchy(int n_random, 0)
The type double function is imsls_d_random_cauchy.
Required Arguments
int n_random (Input)
Number of random numbers to generate.
Return Value
An array of length n_random containing the random Cauchy deviates.
Synopsis with Optional Arguments
#include <imsls.h>
float *imsls_f_random_cauchy (int n_random,
IMSLS_RETURN_USER, float r[],
0)
Optional Arguments
IMSLS_RETURN_USER, float r[] (Output)
User-supplied array of length n_random containing the random Cauchy deviates.
Description
Function imsls_f_random_cauchy generates pseudorandom numbers from a Cauchy distribution. The probability density function is
where T is the median and T  S is the first quartile. This function first generates standard Cauchy random numbers (T = 0 and S = 1) using the technique described below, and then scales the values using T and S.
Use of the inverse CDF technique would yield a Cauchy deviate from a uniform (0, 1) deviate, u, as tan [π (u  0.5)]. Rather than evaluating a tangent directly, however, random_cauchy generates two uniform (1, 1) deviates, x1 and x2. These values can be thought of as sine and cosine values. If
is less than or equal to 1, then x1/x2 is delivered as the unscaled Cauchy deviate; otherwise, x1 and x2 are rejected and two new uniform (1, 1) deviates are generated. This method is also equivalent to taking the ration of two independent normal deviates.
Example
In this example, imsls_f_random_cauchy generates five pseudorandom Cauchy numbers. The generator used is a simple multiplicative congruential with a multiplier of 16807.
 
#include <imsls.h>
#include <stdio.h>
 
int main()
{
int n_random = 5;
float *r;
 
imsls_random_seed_set(123457);
r = imsls_f_random_cauchy(n_random, 0);
printf("Cauchy random deviates: %8.4f%8.4f%8.4f%8.4f%8.4f\n",
r[0], r[1], r[2], r[3], r[4]);
 
}
Output
 
Cauchy random deviates: 3.5765 0.9353 15.5797 2.0815 -0.1333