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