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

char *name = "Migdal et al, Equation (64)";

double f_if(float a1, float a2, float th) {
        float r9121 = th;
        float r9122 = cos(r9121);
        float r9123 = 2;
        float r9124 = sqrt(r9123);
        float r9125 = r9122 / r9124;
        float r9126 = a1;
        float r9127 = r9126 * r9126;
        float r9128 = r9125 * r9127;
        float r9129 = a2;
        float r9130 = r9129 * r9129;
        float r9131 = r9125 * r9130;
        float r9132 = r9128 + r9131;
        return r9132;
}

double f_id(double a1, double a2, double th) {
        double r9133 = th;
        double r9134 = cos(r9133);
        double r9135 = 2;
        double r9136 = sqrt(r9135);
        double r9137 = r9134 / r9136;
        double r9138 = a1;
        double r9139 = r9138 * r9138;
        double r9140 = r9137 * r9139;
        double r9141 = a2;
        double r9142 = r9141 * r9141;
        double r9143 = r9137 * r9142;
        double r9144 = r9140 + r9143;
        return r9144;
}


double f_of(float a1, float a2, float th) {
        float r9145 = th;
        float r9146 = cos(r9145);
        float r9147 = 2;
        float r9148 = sqrt(r9147);
        float r9149 = r9146 / r9148;
        float r9150 = a1;
        float r9151 = r9150 * r9150;
        float r9152 = r9149 * r9151;
        float r9153 = sqrt(r9148);
        float r9154 = r9146 / r9153;
        float r9155 = r9154 / r9153;
        float r9156 = a2;
        float r9157 = r9156 * r9156;
        float r9158 = r9155 * r9157;
        float r9159 = r9152 + r9158;
        return r9159;
}

double f_od(double a1, double a2, double th) {
        double r9160 = th;
        double r9161 = cos(r9160);
        double r9162 = 2;
        double r9163 = sqrt(r9162);
        double r9164 = r9161 / r9163;
        double r9165 = a1;
        double r9166 = r9165 * r9165;
        double r9167 = r9164 * r9166;
        double r9168 = sqrt(r9163);
        double r9169 = r9161 / r9168;
        double r9170 = r9169 / r9168;
        double r9171 = a2;
        double r9172 = r9171 * r9171;
        double r9173 = r9170 * r9172;
        double r9174 = r9167 + r9173;
        return r9174;
}

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 r9175, r9176, r9177, r9178, r9179, r9180, r9181, r9182, r9183, r9184, r9185, r9186;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9175);
        mpfr_init(r9176);
        mpfr_init_set_str(r9177, "2", 10, MPFR_RNDN);
        mpfr_init(r9178);
        mpfr_init(r9179);
        mpfr_init(r9180);
        mpfr_init(r9181);
        mpfr_init(r9182);
        mpfr_init(r9183);
        mpfr_init(r9184);
        mpfr_init(r9185);
        mpfr_init(r9186);
}

double f_im(double a1, double a2, double th) {
        mpfr_set_d(r9175, th, MPFR_RNDN);
        mpfr_cos(r9176, r9175, MPFR_RNDN);
        ;
        mpfr_sqrt(r9178, r9177, MPFR_RNDN);
        mpfr_div(r9179, r9176, r9178, MPFR_RNDN);
        mpfr_set_d(r9180, a1, MPFR_RNDN);
        mpfr_mul(r9181, r9180, r9180, MPFR_RNDN);
        mpfr_mul(r9182, r9179, r9181, MPFR_RNDN);
        mpfr_set_d(r9183, a2, MPFR_RNDN);
        mpfr_mul(r9184, r9183, r9183, MPFR_RNDN);
        mpfr_mul(r9185, r9179, r9184, MPFR_RNDN);
        mpfr_add(r9186, r9182, r9185, MPFR_RNDN);
        return mpfr_get_d(r9186, MPFR_RNDN);
}

static mpfr_t r9187, r9188, r9189, r9190, r9191, r9192, r9193, r9194, r9195, r9196, r9197, r9198, r9199, r9200, r9201;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9187);
        mpfr_init(r9188);
        mpfr_init_set_str(r9189, "2", 10, MPFR_RNDN);
        mpfr_init(r9190);
        mpfr_init(r9191);
        mpfr_init(r9192);
        mpfr_init(r9193);
        mpfr_init(r9194);
        mpfr_init(r9195);
        mpfr_init(r9196);
        mpfr_init(r9197);
        mpfr_init(r9198);
        mpfr_init(r9199);
        mpfr_init(r9200);
        mpfr_init(r9201);
}

double f_fm(double a1, double a2, double th) {
        mpfr_set_d(r9187, th, MPFR_RNDN);
        mpfr_cos(r9188, r9187, MPFR_RNDN);
        ;
        mpfr_sqrt(r9190, r9189, MPFR_RNDN);
        mpfr_div(r9191, r9188, r9190, MPFR_RNDN);
        mpfr_set_d(r9192, a1, MPFR_RNDN);
        mpfr_mul(r9193, r9192, r9192, MPFR_RNDN);
        mpfr_mul(r9194, r9191, r9193, MPFR_RNDN);
        mpfr_sqrt(r9195, r9190, MPFR_RNDN);
        mpfr_div(r9196, r9188, r9195, MPFR_RNDN);
        mpfr_div(r9197, r9196, r9195, MPFR_RNDN);
        mpfr_set_d(r9198, a2, MPFR_RNDN);
        mpfr_mul(r9199, r9198, r9198, MPFR_RNDN);
        mpfr_mul(r9200, r9197, r9199, MPFR_RNDN);
        mpfr_add(r9201, r9194, r9200, MPFR_RNDN);
        return mpfr_get_d(r9201, MPFR_RNDN);
}

static mpfr_t r9202, r9203, r9204, r9205, r9206, r9207, r9208, r9209, r9210, r9211, r9212, r9213, r9214, r9215, r9216;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9202);
        mpfr_init(r9203);
        mpfr_init_set_str(r9204, "2", 10, MPFR_RNDN);
        mpfr_init(r9205);
        mpfr_init(r9206);
        mpfr_init(r9207);
        mpfr_init(r9208);
        mpfr_init(r9209);
        mpfr_init(r9210);
        mpfr_init(r9211);
        mpfr_init(r9212);
        mpfr_init(r9213);
        mpfr_init(r9214);
        mpfr_init(r9215);
        mpfr_init(r9216);
}

double f_dm(double a1, double a2, double th) {
        mpfr_set_d(r9202, th, MPFR_RNDN);
        mpfr_cos(r9203, r9202, MPFR_RNDN);
        ;
        mpfr_sqrt(r9205, r9204, MPFR_RNDN);
        mpfr_div(r9206, r9203, r9205, MPFR_RNDN);
        mpfr_set_d(r9207, a1, MPFR_RNDN);
        mpfr_mul(r9208, r9207, r9207, MPFR_RNDN);
        mpfr_mul(r9209, r9206, r9208, MPFR_RNDN);
        mpfr_sqrt(r9210, r9205, MPFR_RNDN);
        mpfr_div(r9211, r9203, r9210, MPFR_RNDN);
        mpfr_div(r9212, r9211, r9210, MPFR_RNDN);
        mpfr_set_d(r9213, a2, MPFR_RNDN);
        mpfr_mul(r9214, r9213, r9213, MPFR_RNDN);
        mpfr_mul(r9215, r9212, r9214, MPFR_RNDN);
        mpfr_add(r9216, r9209, r9215, MPFR_RNDN);
        return mpfr_get_d(r9216, MPFR_RNDN);
}

