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

◆ mpfc_div()

void mpfc_div ( gmp_CCmutable result,
gmp_CCmutable u,
gmp_CCmutable v )

Definition at line 124 of file complex.c.

125{
126 mpfr_t p, denom;
127 mpfr_init2(p, mpfr_get_prec(u->re));
128 mpfr_init2(denom, mpfr_get_prec(u->re));
129
130 printf("not expected to be used -- we have a bug here\n");
131 abort();
132 if (mpfr_cmpabs(v->re, v->im) >= 0)
133 {
134 // for v = c + d*i,
135 // p = d/c
136 // c+di = c(1+p*i), so denom is c(1+p^2)
137 // which is c + d*p
138
139 // double p = v.im/v.re;
140 // double denom = v.re + p * v.im;
141 // result.re = (u.re + p*u.im)/denom;
142 // result.im = (u.im - p*u.re)/denom;
143
144 mpfr_div(p, v->im, v->re, MPFR_RNDN);
145 mpfr_mul(denom, p, v->im, MPFR_RNDN);
146 mpfr_add(denom, denom, v->re, MPFR_RNDN);
147
148 mpfr_mul(result->re, p, u->im, MPFR_RNDN);
149 mpfr_add(result->re, result->re, u->re, MPFR_RNDN);
150 mpfr_div(result->re, result->re, denom, MPFR_RNDN);
151
152 mpfr_mul(result->im, p, u->re, MPFR_RNDN);
153 mpfr_neg(result->im, result->re, MPFR_RNDN);
154 mpfr_add(result->im, result->re, u->im, MPFR_RNDN);
155 mpfr_div(result->im, result->re, denom, MPFR_RNDN);
156 }
157 else
158 {
159 // double p = v.re/v.im;
160 // double denom = v.im + p * v.re;
161 // result.re = (u.re * p + u.im)/denom;
162 // result.im = (-u.re + p * u.im)/denom;
163
164 mpfr_div(p, v->re, v->im, MPFR_RNDN);
165 mpfr_mul(denom, p, v->re, MPFR_RNDN);
166 mpfr_add(denom, denom, v->im, MPFR_RNDN);
167
168 mpfr_mul(result->re, p, u->re, MPFR_RNDN);
169 mpfr_add(result->re, result->re, u->im, MPFR_RNDN);
170 mpfr_div(result->re, result->re, denom, MPFR_RNDN);
171
172 mpfr_mul(result->im, p, u->im, MPFR_RNDN);
173 mpfr_sub(result->im, result->re, u->re, MPFR_RNDN);
174 mpfr_div(result->im, result->re, denom, MPFR_RNDN);
175 }
176
177 mpfr_clear(p);
178 mpfr_clear(denom);
179#if 0
180 if (fabs(v.re) >= fabs(v.im))
181 {
182 // for u = c + d*i,
183 // p = d/c
184 // c+di = c(1+p*i), so denom is c(1+p^2)
185 // which is c + d*p
186 double p = v.im/v.re;
187 double denom = v.re + p * v.im;
188 result.re = (u.re + p*u.im)/denom;
189 result.im = (u.im - p*u.re)/denom;
190 }
191 else
192 {
193 double p = v.re/v.im;
194 double denom = v.im + p * v.re;
195 result.re = (u.re * p + u.im)/denom;
196 result.im = (-u.re + p * u.im)/denom;
197 }
198#endif
199}
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)
const mpreal fabs(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2293

References p, and result().