#include #define A 106 #define C 1283 #define M 6075 #define SEMENTE 1234 #define IA 16807 #define IM 2147483647 #define AM (1.0/IM) #define IQ 127773 #define IR 2836 #define MASK 123459876 float alearuim(long int *semente); float alea(long *id); int main(void) { long int i, n, semente; float x, y, z, d; n = 100000; semente = SEMENTE; for (i = 0; i < n; i++) { x = alearuim(&semente); y = alearuim(&semente); z = alearuim(&semente); d = sqrt(x * x + y * y + z * z); x = x/d; y = y/d; z = z/d; printf("%f %f %f\n", x, y, z); } } float alearuim(long int *semente) { float x; *semente = (A * (*semente) + C) % M; x = (float) (*semente)/(float) M; return x; } float alea(long *id) { long k; float ans; *id ^= MASK; k = (*id)/IQ; *id = IA * (*id - k * IQ) - IR * k; if (*id < 0) *id += IM; ans = AM * (*id); *id ^= MASK; return (ans); }