Still used but both generator and mtrand via legacy_random_geometric */
| 961 | |
| 962 | /* Still used but both generator and mtrand via legacy_random_geometric */ |
| 963 | RAND_INT_TYPE random_geometric_search(bitgen_t *bitgen_state, double p) { |
| 964 | double U; |
| 965 | RAND_INT_TYPE X; |
| 966 | double sum, prod, q; |
| 967 | |
| 968 | X = 1; |
| 969 | sum = prod = p; |
| 970 | q = 1.0 - p; |
| 971 | U = next_double(bitgen_state); |
| 972 | while (U > sum) { |
| 973 | prod *= q; |
| 974 | sum += prod; |
| 975 | X++; |
| 976 | } |
| 977 | return X; |
| 978 | } |
| 979 | |
| 980 | int64_t random_geometric_inversion(bitgen_t *bitgen_state, double p) { |
| 981 | double z = ceil(-random_standard_exponential(bitgen_state) / npy_log1p(-p)); |
no test coverage detected