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

◆ invert()

void M2::ARingCCC::invert ( ElementType & result,
const ElementType & a ) const
inline

Definition at line 245 of file aring-CCC.hpp.

247 {
248 mpfr_t p, denom;
249 mpfr_init2(p, get_precision());
250 mpfr_init2(denom, get_precision());
251
252 if (mpfr_cmpabs(&a.re, &a.im) >= 0)
253 {
254 // double p = &a.im/&a.re;
255 // double denom = &a.re + p * &a.im;
256 // &result.re = 1.0/denom;
257 // &result.im = - p/denom;
258
259 mpfr_div(p, &a.im, &a.re, MPFR_RNDN);
260 mpfr_mul(denom, p, &a.im, MPFR_RNDN);
261 mpfr_add(denom, denom, &a.re, MPFR_RNDN);
262 mpfr_si_div(&result.re, 1, denom, MPFR_RNDN);
263 mpfr_div(&result.im, p, denom, MPFR_RNDN);
264 mpfr_neg(&result.im, &result.im, MPFR_RNDN);
265 }
266 else
267 {
268 // double p = &a.re/&a.im;
269 // double denom = &a.im + p * &a.re;
270 // &result.re = p/denom;
271 // &result.im = -1.0/denom;
272
273 mpfr_div(p, &a.re, &a.im, MPFR_RNDN);
274 mpfr_mul(denom, p, &a.re, MPFR_RNDN);
275 mpfr_add(denom, denom, &a.im, MPFR_RNDN);
276 mpfr_si_div(&result.im, 1, denom, MPFR_RNDN);
277 mpfr_neg(&result.im, &result.im, MPFR_RNDN);
278 mpfr_div(&result.re, p, denom, MPFR_RNDN);
279 }
280
281 mpfr_clear(p);
282 mpfr_clear(denom);
283 }
unsigned long get_precision() const
Definition aring-CCC.hpp:88
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)

References get_precision(), p, and result().

Referenced by power().