391 {
396
397 if (mpfr_cmpabs(&b.re, &b.im) >= 0)
398 {
399
400
401
402
403
404
405
406
407
408
409 mpfr_div(
p, &b.im, &b.re, MPFR_RNDN);
410 mpfr_mul(denom,
p, &b.im, MPFR_RNDN);
411 mpfr_add(denom, denom, &b.re, MPFR_RNDN);
412
413 mpfr_mul(&
result.value().re,
p, &a.im, MPFR_RNDN);
414 mpfr_add(&
result.value().re, &
result.value().re, &a.re, MPFR_RNDN);
415 mpfr_div(&
result.value().re, &
result.value().re, denom, MPFR_RNDN);
416
417 mpfr_mul(&
result.value().im,
p, &a.re, MPFR_RNDN);
418 mpfr_neg(&
result.value().im, &
result.value().im, MPFR_RNDN);
419 mpfr_add(&
result.value().im, &
result.value().im, &a.im, MPFR_RNDN);
420 mpfr_div(&
result.value().im, &
result.value().im, denom, MPFR_RNDN);
421 }
422 else
423 {
424
425
426
427
428
429 mpfr_div(
p, &b.re, &b.im, MPFR_RNDN);
430 mpfr_mul(denom,
p, &b.re, MPFR_RNDN);
431 mpfr_add(denom, denom, &b.im, MPFR_RNDN);
432
433 mpfr_mul(&
result.value().re,
p, &a.re, MPFR_RNDN);
434 mpfr_add(&
result.value().re, &
result.value().re, &a.im, MPFR_RNDN);
435 mpfr_div(&
result.value().re, &
result.value().re, denom, MPFR_RNDN);
436
437 mpfr_mul(&
result.value().im,
p, &a.im, MPFR_RNDN);
438 mpfr_sub(&
result.value().im, &
result.value().im, &a.re, MPFR_RNDN);
439 mpfr_div(&
result.value().im, &
result.value().im, denom, MPFR_RNDN);
440 }
442 mpfr_clear(denom);
444 }
unsigned long get_precision() const
void set(ElementType &result, const ElementType &a) const
VALGRIND_MAKE_MEM_DEFINED & result(result)