#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 r9172 = th;
        float r9173 = cos(r9172);
        float r9174 = 2.0f;
        float r9175 = sqrt(r9174);
        float r9176 = r9173 / r9175;
        float r9177 = a1;
        float r9178 = r9177 * r9177;
        float r9179 = r9176 * r9178;
        float r9180 = a2;
        float r9181 = r9180 * r9180;
        float r9182 = r9176 * r9181;
        float r9183 = r9179 + r9182;
        return r9183;
}

double f_id(double a1, double a2, double th) {
        double r9184 = th;
        double r9185 = cos(r9184);
        double r9186 = 2.0;
        double r9187 = sqrt(r9186);
        double r9188 = r9185 / r9187;
        double r9189 = a1;
        double r9190 = r9189 * r9189;
        double r9191 = r9188 * r9190;
        double r9192 = a2;
        double r9193 = r9192 * r9192;
        double r9194 = r9188 * r9193;
        double r9195 = r9191 + r9194;
        return r9195;
}


double f_of(float a1, float a2, float th) {
        float r9196 = a2;
        float r9197 = r9196 * r9196;
        float r9198 = a1;
        float r9199 = r9198 * r9198;
        float r9200 = r9197 + r9199;
        float r9201 = th;
        float r9202 = cos(r9201);
        float r9203 = 2.0f;
        float r9204 = sqrt(r9203);
        float r9205 = cbrt(r9204);
        float r9206 = r9205 * r9205;
        float r9207 = r9202 / r9206;
        float r9208 = r9207 / r9205;
        float r9209 = r9200 * r9208;
        return r9209;
}

double f_od(double a1, double a2, double th) {
        double r9210 = a2;
        double r9211 = r9210 * r9210;
        double r9212 = a1;
        double r9213 = r9212 * r9212;
        double r9214 = r9211 + r9213;
        double r9215 = th;
        double r9216 = cos(r9215);
        double r9217 = 2.0;
        double r9218 = sqrt(r9217);
        double r9219 = cbrt(r9218);
        double r9220 = r9219 * r9219;
        double r9221 = r9216 / r9220;
        double r9222 = r9221 / r9219;
        double r9223 = r9214 * r9222;
        return r9223;
}

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 r9224, r9225, r9226, r9227, r9228, r9229, r9230, r9231, r9232, r9233, r9234, r9235;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9224);
        mpfr_init(r9225);
        mpfr_init_set_str(r9226, "2", 10, MPFR_RNDN);
        mpfr_init(r9227);
        mpfr_init(r9228);
        mpfr_init(r9229);
        mpfr_init(r9230);
        mpfr_init(r9231);
        mpfr_init(r9232);
        mpfr_init(r9233);
        mpfr_init(r9234);
        mpfr_init(r9235);
}

double f_im(double a1, double a2, double th) {
        mpfr_set_d(r9224, th, MPFR_RNDN);
        mpfr_cos(r9225, r9224, MPFR_RNDN);
        ;
        mpfr_sqrt(r9227, r9226, MPFR_RNDN);
        mpfr_div(r9228, r9225, r9227, MPFR_RNDN);
        mpfr_set_d(r9229, a1, MPFR_RNDN);
        mpfr_mul(r9230, r9229, r9229, MPFR_RNDN);
        mpfr_mul(r9231, r9228, r9230, MPFR_RNDN);
        mpfr_set_d(r9232, a2, MPFR_RNDN);
        mpfr_mul(r9233, r9232, r9232, MPFR_RNDN);
        mpfr_mul(r9234, r9228, r9233, MPFR_RNDN);
        mpfr_add(r9235, r9231, r9234, MPFR_RNDN);
        return mpfr_get_d(r9235, MPFR_RNDN);
}

static mpfr_t r9236, r9237, r9238, r9239, r9240, r9241, r9242, r9243, r9244, r9245, r9246, r9247, r9248, r9249;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9236);
        mpfr_init(r9237);
        mpfr_init(r9238);
        mpfr_init(r9239);
        mpfr_init(r9240);
        mpfr_init(r9241);
        mpfr_init(r9242);
        mpfr_init_set_str(r9243, "2", 10, MPFR_RNDN);
        mpfr_init(r9244);
        mpfr_init(r9245);
        mpfr_init(r9246);
        mpfr_init(r9247);
        mpfr_init(r9248);
        mpfr_init(r9249);
}

double f_fm(double a1, double a2, double th) {
        mpfr_set_d(r9236, a2, MPFR_RNDN);
        mpfr_mul(r9237, r9236, r9236, MPFR_RNDN);
        mpfr_set_d(r9238, a1, MPFR_RNDN);
        mpfr_mul(r9239, r9238, r9238, MPFR_RNDN);
        mpfr_add(r9240, r9237, r9239, MPFR_RNDN);
        mpfr_set_d(r9241, th, MPFR_RNDN);
        mpfr_cos(r9242, r9241, MPFR_RNDN);
        ;
        mpfr_sqrt(r9244, r9243, MPFR_RNDN);
        mpfr_cbrt(r9245, r9244, MPFR_RNDN);
        mpfr_mul(r9246, r9245, r9245, MPFR_RNDN);
        mpfr_div(r9247, r9242, r9246, MPFR_RNDN);
        mpfr_div(r9248, r9247, r9245, MPFR_RNDN);
        mpfr_mul(r9249, r9240, r9248, MPFR_RNDN);
        return mpfr_get_d(r9249, MPFR_RNDN);
}

static mpfr_t r9250, r9251, r9252, r9253, r9254, r9255, r9256, r9257, r9258, r9259, r9260, r9261, r9262, r9263;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9250);
        mpfr_init(r9251);
        mpfr_init(r9252);
        mpfr_init(r9253);
        mpfr_init(r9254);
        mpfr_init(r9255);
        mpfr_init(r9256);
        mpfr_init_set_str(r9257, "2", 10, MPFR_RNDN);
        mpfr_init(r9258);
        mpfr_init(r9259);
        mpfr_init(r9260);
        mpfr_init(r9261);
        mpfr_init(r9262);
        mpfr_init(r9263);
}

double f_dm(double a1, double a2, double th) {
        mpfr_set_d(r9250, a2, MPFR_RNDN);
        mpfr_mul(r9251, r9250, r9250, MPFR_RNDN);
        mpfr_set_d(r9252, a1, MPFR_RNDN);
        mpfr_mul(r9253, r9252, r9252, MPFR_RNDN);
        mpfr_add(r9254, r9251, r9253, MPFR_RNDN);
        mpfr_set_d(r9255, th, MPFR_RNDN);
        mpfr_cos(r9256, r9255, MPFR_RNDN);
        ;
        mpfr_sqrt(r9258, r9257, MPFR_RNDN);
        mpfr_cbrt(r9259, r9258, MPFR_RNDN);
        mpfr_mul(r9260, r9259, r9259, MPFR_RNDN);
        mpfr_div(r9261, r9256, r9260, MPFR_RNDN);
        mpfr_div(r9262, r9261, r9259, MPFR_RNDN);
        mpfr_mul(r9263, r9254, r9262, MPFR_RNDN);
        return mpfr_get_d(r9263, MPFR_RNDN);
}

