1 /*
2     Copyright (C) 2018 Fredrik Johansson
3 
4     This file is part of Arb.
5 
6     Arb is free software: you can redistribute it and/or modify it under
7     the terms of the GNU Lesser General Public License (LGPL) as published
8     by the Free Software Foundation; either version 2.1 of the License, or
9     (at your option) any later version.  See <http://www.gnu.org/licenses/>.
10 */
11 
12 #include "acb.h"
13 
14 void
acb_real_abs(acb_t res,const acb_t z,int analytic,slong prec)15 acb_real_abs(acb_t res, const acb_t z, int analytic, slong prec)
16 {
17     if (!acb_is_finite(z) || (analytic && arb_contains_zero(acb_realref(z))))
18     {
19         acb_indeterminate(res);
20     }
21     else
22     {
23         if (arb_is_nonnegative(acb_realref(z)))
24         {
25             acb_set_round(res, z, prec);
26         }
27         else if (arb_is_negative(acb_realref(z)))
28         {
29             acb_neg_round(res, z, prec);
30         }
31         else
32         {
33             acb_t t;
34             acb_init(t);
35             acb_neg(t, z);
36             acb_union(res, z, t, prec);
37             acb_clear(t);
38         }
39     }
40 }
41