| 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)); |
| 982 | /* |
| 983 | * The constant 9.223372036854776e+18 is the smallest double that is |
| 984 | * larger than INT64_MAX. |
| 985 | */ |
| 986 | if (z >= 9.223372036854776e+18) { |
| 987 | return INT64_MAX; |
| 988 | } |
| 989 | return (int64_t) z; |
| 990 | } |
| 991 | |
| 992 | int64_t random_geometric(bitgen_t *bitgen_state, double p) { |
| 993 | if (p >= 0.333333333333333333333333) { |
no test coverage detected