#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "math.arg on complex";

double f_if(float re, float im) {
        float r18510 = im;
        float r18511 = re;
        float r18512 = atan2(r18510, r18511);
        return r18512;
}

double f_id(double re, double im) {
        double r18513 = im;
        double r18514 = re;
        double r18515 = atan2(r18513, r18514);
        return r18515;
}


double f_of(float re, float im) {
        float r18516 = im;
        float r18517 = re;
        float r18518 = atan2(r18516, r18517);
        return r18518;
}

double f_od(double re, double im) {
        double r18519 = im;
        double r18520 = re;
        double r18521 = atan2(r18519, r18520);
        return r18521;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r18522, r18523, r18524;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r18522);
        mpfr_init(r18523);
        mpfr_init(r18524);
}

double f_im(double re, double im) {
        mpfr_set_d(r18522, im, MPFR_RNDN);
        mpfr_set_d(r18523, re, MPFR_RNDN);
        mpfr_atan2(r18524, r18522, r18523, MPFR_RNDN);
        return mpfr_get_d(r18524, MPFR_RNDN);
}

static mpfr_t r18525, r18526, r18527;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18525);
        mpfr_init(r18526);
        mpfr_init(r18527);
}

double f_fm(double re, double im) {
        mpfr_set_d(r18525, im, MPFR_RNDN);
        mpfr_set_d(r18526, re, MPFR_RNDN);
        mpfr_atan2(r18527, r18525, r18526, MPFR_RNDN);
        return mpfr_get_d(r18527, MPFR_RNDN);
}

static mpfr_t r18528, r18529, r18530;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r18528);
        mpfr_init(r18529);
        mpfr_init(r18530);
}

double f_dm(double re, double im) {
        mpfr_set_d(r18528, im, MPFR_RNDN);
        mpfr_set_d(r18529, re, MPFR_RNDN);
        mpfr_atan2(r18530, r18528, r18529, MPFR_RNDN);
        return mpfr_get_d(r18530, MPFR_RNDN);
}

