#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 r9258 = th;
        float r9259 = cos(r9258);
        float r9260 = 2;
        float r9261 = sqrt(r9260);
        float r9262 = r9259 / r9261;
        float r9263 = a1;
        float r9264 = r9263 * r9263;
        float r9265 = r9262 * r9264;
        float r9266 = a2;
        float r9267 = r9266 * r9266;
        float r9268 = r9262 * r9267;
        float r9269 = r9265 + r9268;
        return r9269;
}

double f_id(double a1, double a2, double th) {
        double r9270 = th;
        double r9271 = cos(r9270);
        double r9272 = 2;
        double r9273 = sqrt(r9272);
        double r9274 = r9271 / r9273;
        double r9275 = a1;
        double r9276 = r9275 * r9275;
        double r9277 = r9274 * r9276;
        double r9278 = a2;
        double r9279 = r9278 * r9278;
        double r9280 = r9274 * r9279;
        double r9281 = r9277 + r9280;
        return r9281;
}


double f_of(float a1, float a2, float th) {
        float r9282 = th;
        float r9283 = cos(r9282);
        float r9284 = a1;
        float r9285 = a2;
        float r9286 = r9285 * r9285;
        float r9287 = fma(r9284, r9284, r9286);
        float r9288 = 2;
        float r9289 = sqrt(r9288);
        float r9290 = r9287 / r9289;
        float r9291 = r9283 * r9290;
        return r9291;
}

double f_od(double a1, double a2, double th) {
        double r9292 = th;
        double r9293 = cos(r9292);
        double r9294 = a1;
        double r9295 = a2;
        double r9296 = r9295 * r9295;
        double r9297 = fma(r9294, r9294, r9296);
        double r9298 = 2;
        double r9299 = sqrt(r9298);
        double r9300 = r9297 / r9299;
        double r9301 = r9293 * r9300;
        return r9301;
}

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 r9302, r9303, r9304, r9305, r9306, r9307, r9308, r9309, r9310, r9311, r9312, r9313;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9302);
        mpfr_init(r9303);
        mpfr_init_set_str(r9304, "2", 10, MPFR_RNDN);
        mpfr_init(r9305);
        mpfr_init(r9306);
        mpfr_init(r9307);
        mpfr_init(r9308);
        mpfr_init(r9309);
        mpfr_init(r9310);
        mpfr_init(r9311);
        mpfr_init(r9312);
        mpfr_init(r9313);
}

double f_im(double a1, double a2, double th) {
        mpfr_set_d(r9302, th, MPFR_RNDN);
        mpfr_cos(r9303, r9302, MPFR_RNDN);
        ;
        mpfr_sqrt(r9305, r9304, MPFR_RNDN);
        mpfr_div(r9306, r9303, r9305, MPFR_RNDN);
        mpfr_set_d(r9307, a1, MPFR_RNDN);
        mpfr_mul(r9308, r9307, r9307, MPFR_RNDN);
        mpfr_mul(r9309, r9306, r9308, MPFR_RNDN);
        mpfr_set_d(r9310, a2, MPFR_RNDN);
        mpfr_mul(r9311, r9310, r9310, MPFR_RNDN);
        mpfr_mul(r9312, r9306, r9311, MPFR_RNDN);
        mpfr_add(r9313, r9309, r9312, MPFR_RNDN);
        return mpfr_get_d(r9313, MPFR_RNDN);
}

static mpfr_t r9314, r9315, r9316, r9317, r9318, r9319, r9320, r9321, r9322, r9323;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9314);
        mpfr_init(r9315);
        mpfr_init(r9316);
        mpfr_init(r9317);
        mpfr_init(r9318);
        mpfr_init(r9319);
        mpfr_init_set_str(r9320, "2", 10, MPFR_RNDN);
        mpfr_init(r9321);
        mpfr_init(r9322);
        mpfr_init(r9323);
}

double f_fm(double a1, double a2, double th) {
        mpfr_set_d(r9314, th, MPFR_RNDN);
        mpfr_cos(r9315, r9314, MPFR_RNDN);
        mpfr_set_d(r9316, a1, MPFR_RNDN);
        mpfr_set_d(r9317, a2, MPFR_RNDN);
        mpfr_mul(r9318, r9317, r9317, MPFR_RNDN);
        mpfr_fma(r9319, r9316, r9316, r9318, MPFR_RNDN);
        ;
        mpfr_sqrt(r9321, r9320, MPFR_RNDN);
        mpfr_div(r9322, r9319, r9321, MPFR_RNDN);
        mpfr_mul(r9323, r9315, r9322, MPFR_RNDN);
        return mpfr_get_d(r9323, MPFR_RNDN);
}

static mpfr_t r9324, r9325, r9326, r9327, r9328, r9329, r9330, r9331, r9332, r9333;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9324);
        mpfr_init(r9325);
        mpfr_init(r9326);
        mpfr_init(r9327);
        mpfr_init(r9328);
        mpfr_init(r9329);
        mpfr_init_set_str(r9330, "2", 10, MPFR_RNDN);
        mpfr_init(r9331);
        mpfr_init(r9332);
        mpfr_init(r9333);
}

double f_dm(double a1, double a2, double th) {
        mpfr_set_d(r9324, th, MPFR_RNDN);
        mpfr_cos(r9325, r9324, MPFR_RNDN);
        mpfr_set_d(r9326, a1, MPFR_RNDN);
        mpfr_set_d(r9327, a2, MPFR_RNDN);
        mpfr_mul(r9328, r9327, r9327, MPFR_RNDN);
        mpfr_fma(r9329, r9326, r9326, r9328, MPFR_RNDN);
        ;
        mpfr_sqrt(r9331, r9330, MPFR_RNDN);
        mpfr_div(r9332, r9329, r9331, MPFR_RNDN);
        mpfr_mul(r9333, r9325, r9332, MPFR_RNDN);
        return mpfr_get_d(r9333, MPFR_RNDN);
}

