#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 r28384 = J;
        float r28385 = l;
        float r28386 = exp(r28385);
        float r28387 = -r28385;
        float r28388 = exp(r28387);
        float r28389 = r28386 - r28388;
        float r28390 = r28384 * r28389;
        float r28391 = K;
        float r28392 = 2;
        float r28393 = r28391 / r28392;
        float r28394 = cos(r28393);
        float r28395 = r28390 * r28394;
        float r28396 = U;
        float r28397 = r28395 + r28396;
        return r28397;
}

double f_id(double J, double l, double K, double U) {
        double r28398 = J;
        double r28399 = l;
        double r28400 = exp(r28399);
        double r28401 = -r28399;
        double r28402 = exp(r28401);
        double r28403 = r28400 - r28402;
        double r28404 = r28398 * r28403;
        double r28405 = K;
        double r28406 = 2;
        double r28407 = r28405 / r28406;
        double r28408 = cos(r28407);
        double r28409 = r28404 * r28408;
        double r28410 = U;
        double r28411 = r28409 + r28410;
        return r28411;
}


double f_of(float J, float l, float K, float U) {
        float r28412 = J;
        float r28413 = 1/3;
        float r28414 = l;
        float r28415 = 3;
        float r28416 = pow(r28414, r28415);
        float r28417 = r28413 * r28416;
        float r28418 = 2;
        float r28419 = r28418 * r28414;
        float r28420 = 1/60;
        float r28421 = 5;
        float r28422 = pow(r28414, r28421);
        float r28423 = r28420 * r28422;
        float r28424 = r28419 + r28423;
        float r28425 = r28417 + r28424;
        float r28426 = r28412 * r28425;
        float r28427 = K;
        float r28428 = r28427 / r28418;
        float r28429 = cos(r28428);
        float r28430 = r28426 * r28429;
        float r28431 = U;
        float r28432 = r28430 + r28431;
        return r28432;
}

double f_od(double J, double l, double K, double U) {
        double r28433 = J;
        double r28434 = 1/3;
        double r28435 = l;
        double r28436 = 3;
        double r28437 = pow(r28435, r28436);
        double r28438 = r28434 * r28437;
        double r28439 = 2;
        double r28440 = r28439 * r28435;
        double r28441 = 1/60;
        double r28442 = 5;
        double r28443 = pow(r28435, r28442);
        double r28444 = r28441 * r28443;
        double r28445 = r28440 + r28444;
        double r28446 = r28438 + r28445;
        double r28447 = r28433 * r28446;
        double r28448 = K;
        double r28449 = r28448 / r28439;
        double r28450 = cos(r28449);
        double r28451 = r28447 * r28450;
        double r28452 = U;
        double r28453 = r28451 + r28452;
        return r28453;
}

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 r28454, r28455, r28456, r28457, r28458, r28459, r28460, r28461, r28462, r28463, r28464, r28465, r28466, r28467;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28454);
        mpfr_init(r28455);
        mpfr_init(r28456);
        mpfr_init(r28457);
        mpfr_init(r28458);
        mpfr_init(r28459);
        mpfr_init(r28460);
        mpfr_init(r28461);
        mpfr_init_set_str(r28462, "2", 10, MPFR_RNDN);
        mpfr_init(r28463);
        mpfr_init(r28464);
        mpfr_init(r28465);
        mpfr_init(r28466);
        mpfr_init(r28467);
}

double f_im(double J, double l, double K, double U) {
        mpfr_set_d(r28454, J, MPFR_RNDN);
        mpfr_set_d(r28455, l, MPFR_RNDN);
        mpfr_exp(r28456, r28455, MPFR_RNDN);
        mpfr_neg(r28457, r28455, MPFR_RNDN);
        mpfr_exp(r28458, r28457, MPFR_RNDN);
        mpfr_sub(r28459, r28456, r28458, MPFR_RNDN);
        mpfr_mul(r28460, r28454, r28459, MPFR_RNDN);
        mpfr_set_d(r28461, K, MPFR_RNDN);
        ;
        mpfr_div(r28463, r28461, r28462, MPFR_RNDN);
        mpfr_cos(r28464, r28463, MPFR_RNDN);
        mpfr_mul(r28465, r28460, r28464, MPFR_RNDN);
        mpfr_set_d(r28466, U, MPFR_RNDN);
        mpfr_add(r28467, r28465, r28466, MPFR_RNDN);
        return mpfr_get_d(r28467, MPFR_RNDN);
}

static mpfr_t r28468, r28469, r28470, r28471, r28472, r28473, r28474, r28475, r28476, r28477, r28478, r28479, r28480, r28481, r28482, r28483, r28484, r28485, r28486, r28487, r28488;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28468);
        mpfr_init_set_str(r28469, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28470);
        mpfr_init_set_str(r28471, "3", 10, MPFR_RNDN);
        mpfr_init(r28472);
        mpfr_init(r28473);
        mpfr_init_set_str(r28474, "2", 10, MPFR_RNDN);
        mpfr_init(r28475);
        mpfr_init_set_str(r28476, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r28477, "5", 10, MPFR_RNDN);
        mpfr_init(r28478);
        mpfr_init(r28479);
        mpfr_init(r28480);
        mpfr_init(r28481);
        mpfr_init(r28482);
        mpfr_init(r28483);
        mpfr_init(r28484);
        mpfr_init(r28485);
        mpfr_init(r28486);
        mpfr_init(r28487);
        mpfr_init(r28488);
}

double f_fm(double J, double l, double K, double U) {
        mpfr_set_d(r28468, J, MPFR_RNDN);
        ;
        mpfr_set_d(r28470, l, MPFR_RNDN);
        ;
        mpfr_pow(r28472, r28470, r28471, MPFR_RNDN);
        mpfr_mul(r28473, r28469, r28472, MPFR_RNDN);
        ;
        mpfr_mul(r28475, r28474, r28470, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28478, r28470, r28477, MPFR_RNDN);
        mpfr_mul(r28479, r28476, r28478, MPFR_RNDN);
        mpfr_add(r28480, r28475, r28479, MPFR_RNDN);
        mpfr_add(r28481, r28473, r28480, MPFR_RNDN);
        mpfr_mul(r28482, r28468, r28481, MPFR_RNDN);
        mpfr_set_d(r28483, K, MPFR_RNDN);
        mpfr_div(r28484, r28483, r28474, MPFR_RNDN);
        mpfr_cos(r28485, r28484, MPFR_RNDN);
        mpfr_mul(r28486, r28482, r28485, MPFR_RNDN);
        mpfr_set_d(r28487, U, MPFR_RNDN);
        mpfr_add(r28488, r28486, r28487, MPFR_RNDN);
        return mpfr_get_d(r28488, MPFR_RNDN);
}

static mpfr_t r28489, r28490, r28491, r28492, r28493, r28494, r28495, r28496, r28497, r28498, r28499, r28500, r28501, r28502, r28503, r28504, r28505, r28506, r28507, r28508, r28509;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28489);
        mpfr_init_set_str(r28490, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28491);
        mpfr_init_set_str(r28492, "3", 10, MPFR_RNDN);
        mpfr_init(r28493);
        mpfr_init(r28494);
        mpfr_init_set_str(r28495, "2", 10, MPFR_RNDN);
        mpfr_init(r28496);
        mpfr_init_set_str(r28497, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r28498, "5", 10, MPFR_RNDN);
        mpfr_init(r28499);
        mpfr_init(r28500);
        mpfr_init(r28501);
        mpfr_init(r28502);
        mpfr_init(r28503);
        mpfr_init(r28504);
        mpfr_init(r28505);
        mpfr_init(r28506);
        mpfr_init(r28507);
        mpfr_init(r28508);
        mpfr_init(r28509);
}

double f_dm(double J, double l, double K, double U) {
        mpfr_set_d(r28489, J, MPFR_RNDN);
        ;
        mpfr_set_d(r28491, l, MPFR_RNDN);
        ;
        mpfr_pow(r28493, r28491, r28492, MPFR_RNDN);
        mpfr_mul(r28494, r28490, r28493, MPFR_RNDN);
        ;
        mpfr_mul(r28496, r28495, r28491, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28499, r28491, r28498, MPFR_RNDN);
        mpfr_mul(r28500, r28497, r28499, MPFR_RNDN);
        mpfr_add(r28501, r28496, r28500, MPFR_RNDN);
        mpfr_add(r28502, r28494, r28501, MPFR_RNDN);
        mpfr_mul(r28503, r28489, r28502, MPFR_RNDN);
        mpfr_set_d(r28504, K, MPFR_RNDN);
        mpfr_div(r28505, r28504, r28495, MPFR_RNDN);
        mpfr_cos(r28506, r28505, MPFR_RNDN);
        mpfr_mul(r28507, r28503, r28506, MPFR_RNDN);
        mpfr_set_d(r28508, U, MPFR_RNDN);
        mpfr_add(r28509, r28507, r28508, MPFR_RNDN);
        return mpfr_get_d(r28509, MPFR_RNDN);
}

