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

char *name = "Maksimov and Kolovsky, Equation (4)";

double f_if(float J, float l, float K, float U) {
        float r30463121 = J;
        float r30463122 = l;
        float r30463123 = exp(r30463122);
        float r30463124 = -r30463122;
        float r30463125 = exp(r30463124);
        float r30463126 = r30463123 - r30463125;
        float r30463127 = r30463121 * r30463126;
        float r30463128 = K;
        float r30463129 = 2;
        float r30463130 = r30463128 / r30463129;
        float r30463131 = cos(r30463130);
        float r30463132 = r30463127 * r30463131;
        float r30463133 = U;
        float r30463134 = r30463132 + r30463133;
        return r30463134;
}

double f_id(double J, double l, double K, double U) {
        double r30463135 = J;
        double r30463136 = l;
        double r30463137 = exp(r30463136);
        double r30463138 = -r30463136;
        double r30463139 = exp(r30463138);
        double r30463140 = r30463137 - r30463139;
        double r30463141 = r30463135 * r30463140;
        double r30463142 = K;
        double r30463143 = 2;
        double r30463144 = r30463142 / r30463143;
        double r30463145 = cos(r30463144);
        double r30463146 = r30463141 * r30463145;
        double r30463147 = U;
        double r30463148 = r30463146 + r30463147;
        return r30463148;
}


double f_of(float J, float l, float K, float U) {
        float r30463149 = J;
        float r30463150 = 1/3;
        float r30463151 = l;
        float r30463152 = 3;
        float r30463153 = pow(r30463151, r30463152);
        float r30463154 = r30463150 * r30463153;
        float r30463155 = 2;
        float r30463156 = r30463155 * r30463151;
        float r30463157 = 1/60;
        float r30463158 = 5;
        float r30463159 = pow(r30463151, r30463158);
        float r30463160 = r30463157 * r30463159;
        float r30463161 = r30463156 + r30463160;
        float r30463162 = r30463154 + r30463161;
        float r30463163 = r30463149 * r30463162;
        float r30463164 = K;
        float r30463165 = r30463164 / r30463155;
        float r30463166 = cos(r30463165);
        float r30463167 = r30463163 * r30463166;
        float r30463168 = U;
        float r30463169 = r30463167 + r30463168;
        return r30463169;
}

double f_od(double J, double l, double K, double U) {
        double r30463170 = J;
        double r30463171 = 1/3;
        double r30463172 = l;
        double r30463173 = 3;
        double r30463174 = pow(r30463172, r30463173);
        double r30463175 = r30463171 * r30463174;
        double r30463176 = 2;
        double r30463177 = r30463176 * r30463172;
        double r30463178 = 1/60;
        double r30463179 = 5;
        double r30463180 = pow(r30463172, r30463179);
        double r30463181 = r30463178 * r30463180;
        double r30463182 = r30463177 + r30463181;
        double r30463183 = r30463175 + r30463182;
        double r30463184 = r30463170 * r30463183;
        double r30463185 = K;
        double r30463186 = r30463185 / r30463176;
        double r30463187 = cos(r30463186);
        double r30463188 = r30463184 * r30463187;
        double r30463189 = U;
        double r30463190 = r30463188 + r30463189;
        return r30463190;
}

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 r30463191, r30463192, r30463193, r30463194, r30463195, r30463196, r30463197, r30463198, r30463199, r30463200, r30463201, r30463202, r30463203, r30463204;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r30463191);
        mpfr_init(r30463192);
        mpfr_init(r30463193);
        mpfr_init(r30463194);
        mpfr_init(r30463195);
        mpfr_init(r30463196);
        mpfr_init(r30463197);
        mpfr_init(r30463198);
        mpfr_init_set_str(r30463199, "2", 10, MPFR_RNDN);
        mpfr_init(r30463200);
        mpfr_init(r30463201);
        mpfr_init(r30463202);
        mpfr_init(r30463203);
        mpfr_init(r30463204);
}

double f_im(double J, double l, double K, double U) {
        mpfr_set_d(r30463191, J, MPFR_RNDN);
        mpfr_set_d(r30463192, l, MPFR_RNDN);
        mpfr_exp(r30463193, r30463192, MPFR_RNDN);
        mpfr_neg(r30463194, r30463192, MPFR_RNDN);
        mpfr_exp(r30463195, r30463194, MPFR_RNDN);
        mpfr_sub(r30463196, r30463193, r30463195, MPFR_RNDN);
        mpfr_mul(r30463197, r30463191, r30463196, MPFR_RNDN);
        mpfr_set_d(r30463198, K, MPFR_RNDN);
        ;
        mpfr_div(r30463200, r30463198, r30463199, MPFR_RNDN);
        mpfr_cos(r30463201, r30463200, MPFR_RNDN);
        mpfr_mul(r30463202, r30463197, r30463201, MPFR_RNDN);
        mpfr_set_d(r30463203, U, MPFR_RNDN);
        mpfr_add(r30463204, r30463202, r30463203, MPFR_RNDN);
        return mpfr_get_d(r30463204, MPFR_RNDN);
}

static mpfr_t r30463205, r30463206, r30463207, r30463208, r30463209, r30463210, r30463211, r30463212, r30463213, r30463214, r30463215, r30463216, r30463217, r30463218, r30463219, r30463220, r30463221, r30463222, r30463223, r30463224, r30463225;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r30463205);
        mpfr_init_set_str(r30463206, "1/3", 10, MPFR_RNDN);
        mpfr_init(r30463207);
        mpfr_init_set_str(r30463208, "3", 10, MPFR_RNDN);
        mpfr_init(r30463209);
        mpfr_init(r30463210);
        mpfr_init_set_str(r30463211, "2", 10, MPFR_RNDN);
        mpfr_init(r30463212);
        mpfr_init_set_str(r30463213, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r30463214, "5", 10, MPFR_RNDN);
        mpfr_init(r30463215);
        mpfr_init(r30463216);
        mpfr_init(r30463217);
        mpfr_init(r30463218);
        mpfr_init(r30463219);
        mpfr_init(r30463220);
        mpfr_init(r30463221);
        mpfr_init(r30463222);
        mpfr_init(r30463223);
        mpfr_init(r30463224);
        mpfr_init(r30463225);
}

double f_fm(double J, double l, double K, double U) {
        mpfr_set_d(r30463205, J, MPFR_RNDN);
        ;
        mpfr_set_d(r30463207, l, MPFR_RNDN);
        ;
        mpfr_pow(r30463209, r30463207, r30463208, MPFR_RNDN);
        mpfr_mul(r30463210, r30463206, r30463209, MPFR_RNDN);
        ;
        mpfr_mul(r30463212, r30463211, r30463207, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r30463215, r30463207, r30463214, MPFR_RNDN);
        mpfr_mul(r30463216, r30463213, r30463215, MPFR_RNDN);
        mpfr_add(r30463217, r30463212, r30463216, MPFR_RNDN);
        mpfr_add(r30463218, r30463210, r30463217, MPFR_RNDN);
        mpfr_mul(r30463219, r30463205, r30463218, MPFR_RNDN);
        mpfr_set_d(r30463220, K, MPFR_RNDN);
        mpfr_div(r30463221, r30463220, r30463211, MPFR_RNDN);
        mpfr_cos(r30463222, r30463221, MPFR_RNDN);
        mpfr_mul(r30463223, r30463219, r30463222, MPFR_RNDN);
        mpfr_set_d(r30463224, U, MPFR_RNDN);
        mpfr_add(r30463225, r30463223, r30463224, MPFR_RNDN);
        return mpfr_get_d(r30463225, MPFR_RNDN);
}

static mpfr_t r30463226, r30463227, r30463228, r30463229, r30463230, r30463231, r30463232, r30463233, r30463234, r30463235, r30463236, r30463237, r30463238, r30463239, r30463240, r30463241, r30463242, r30463243, r30463244, r30463245, r30463246;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r30463226);
        mpfr_init_set_str(r30463227, "1/3", 10, MPFR_RNDN);
        mpfr_init(r30463228);
        mpfr_init_set_str(r30463229, "3", 10, MPFR_RNDN);
        mpfr_init(r30463230);
        mpfr_init(r30463231);
        mpfr_init_set_str(r30463232, "2", 10, MPFR_RNDN);
        mpfr_init(r30463233);
        mpfr_init_set_str(r30463234, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r30463235, "5", 10, MPFR_RNDN);
        mpfr_init(r30463236);
        mpfr_init(r30463237);
        mpfr_init(r30463238);
        mpfr_init(r30463239);
        mpfr_init(r30463240);
        mpfr_init(r30463241);
        mpfr_init(r30463242);
        mpfr_init(r30463243);
        mpfr_init(r30463244);
        mpfr_init(r30463245);
        mpfr_init(r30463246);
}

double f_dm(double J, double l, double K, double U) {
        mpfr_set_d(r30463226, J, MPFR_RNDN);
        ;
        mpfr_set_d(r30463228, l, MPFR_RNDN);
        ;
        mpfr_pow(r30463230, r30463228, r30463229, MPFR_RNDN);
        mpfr_mul(r30463231, r30463227, r30463230, MPFR_RNDN);
        ;
        mpfr_mul(r30463233, r30463232, r30463228, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r30463236, r30463228, r30463235, MPFR_RNDN);
        mpfr_mul(r30463237, r30463234, r30463236, MPFR_RNDN);
        mpfr_add(r30463238, r30463233, r30463237, MPFR_RNDN);
        mpfr_add(r30463239, r30463231, r30463238, MPFR_RNDN);
        mpfr_mul(r30463240, r30463226, r30463239, MPFR_RNDN);
        mpfr_set_d(r30463241, K, MPFR_RNDN);
        mpfr_div(r30463242, r30463241, r30463232, MPFR_RNDN);
        mpfr_cos(r30463243, r30463242, MPFR_RNDN);
        mpfr_mul(r30463244, r30463240, r30463243, MPFR_RNDN);
        mpfr_set_d(r30463245, U, MPFR_RNDN);
        mpfr_add(r30463246, r30463244, r30463245, MPFR_RNDN);
        return mpfr_get_d(r30463246, MPFR_RNDN);
}

