Macaulay2 Engine
Loading...
Searching...
No Matches

◆ rawSetRandomQQ()

void rawSetRandomQQ ( mpq_ptr result,
gmp_ZZ height )

Definition at line 170 of file random.cpp.

173{
174 mpz_t d;
175
176 mpz_init(d);
177 if (height == nullptr) height = maxHeight;
178 if (mpz_cmp_si(height, 0) <= 0)
179 throw exc::engine_error("expected a positive height");
180
181 while (true) {
182 mpz_urandomm(mpq_numref(result), state, height);
183 mpz_urandomm(mpq_denref(result), state, height);
184 mpz_add_ui(mpq_numref(result), mpq_numref(result), 1);
185 mpz_add_ui(mpq_denref(result), mpq_denref(result), 1);
186 mpz_gcd(d, mpq_numref(result), mpq_denref(result));
187 if (mpz_cmp_ui(d, 1) == 0)
188 break;
189 }
190
191 mpz_clear(d);
192}
VALGRIND_MAKE_MEM_DEFINED & result(result)
static mpz_t maxHeight
Definition random.cpp:17
static gmp_randstate_t state
Definition random.cpp:18

References maxHeight, result(), and state.

Referenced by M2::ARingQQGMP::random(), and rawRandomQQ().