#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 r28529 = J;
        float r28530 = l;
        float r28531 = exp(r28530);
        float r28532 = -r28530;
        float r28533 = exp(r28532);
        float r28534 = r28531 - r28533;
        float r28535 = r28529 * r28534;
        float r28536 = K;
        float r28537 = 2;
        float r28538 = r28536 / r28537;
        float r28539 = cos(r28538);
        float r28540 = r28535 * r28539;
        float r28541 = U;
        float r28542 = r28540 + r28541;
        return r28542;
}

double f_id(double J, double l, double K, double U) {
        double r28543 = J;
        double r28544 = l;
        double r28545 = exp(r28544);
        double r28546 = -r28544;
        double r28547 = exp(r28546);
        double r28548 = r28545 - r28547;
        double r28549 = r28543 * r28548;
        double r28550 = K;
        double r28551 = 2;
        double r28552 = r28550 / r28551;
        double r28553 = cos(r28552);
        double r28554 = r28549 * r28553;
        double r28555 = U;
        double r28556 = r28554 + r28555;
        return r28556;
}


double f_of(float J, float l, float K, float U) {
        float r28557 = J;
        float r28558 = 1/3;
        float r28559 = l;
        float r28560 = 3;
        float r28561 = pow(r28559, r28560);
        float r28562 = r28558 * r28561;
        float r28563 = 2;
        float r28564 = r28563 * r28559;
        float r28565 = 1/60;
        float r28566 = 5;
        float r28567 = pow(r28559, r28566);
        float r28568 = r28565 * r28567;
        float r28569 = r28564 + r28568;
        float r28570 = r28562 + r28569;
        float r28571 = r28557 * r28570;
        float r28572 = K;
        float r28573 = r28572 / r28563;
        float r28574 = cos(r28573);
        float r28575 = r28571 * r28574;
        float r28576 = U;
        float r28577 = r28575 + r28576;
        return r28577;
}

double f_od(double J, double l, double K, double U) {
        double r28578 = J;
        double r28579 = 1/3;
        double r28580 = l;
        double r28581 = 3;
        double r28582 = pow(r28580, r28581);
        double r28583 = r28579 * r28582;
        double r28584 = 2;
        double r28585 = r28584 * r28580;
        double r28586 = 1/60;
        double r28587 = 5;
        double r28588 = pow(r28580, r28587);
        double r28589 = r28586 * r28588;
        double r28590 = r28585 + r28589;
        double r28591 = r28583 + r28590;
        double r28592 = r28578 * r28591;
        double r28593 = K;
        double r28594 = r28593 / r28584;
        double r28595 = cos(r28594);
        double r28596 = r28592 * r28595;
        double r28597 = U;
        double r28598 = r28596 + r28597;
        return r28598;
}

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 r28599, r28600, r28601, r28602, r28603, r28604, r28605, r28606, r28607, r28608, r28609, r28610, r28611, r28612;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28599);
        mpfr_init(r28600);
        mpfr_init(r28601);
        mpfr_init(r28602);
        mpfr_init(r28603);
        mpfr_init(r28604);
        mpfr_init(r28605);
        mpfr_init(r28606);
        mpfr_init_set_str(r28607, "2", 10, MPFR_RNDN);
        mpfr_init(r28608);
        mpfr_init(r28609);
        mpfr_init(r28610);
        mpfr_init(r28611);
        mpfr_init(r28612);
}

double f_im(double J, double l, double K, double U) {
        mpfr_set_d(r28599, J, MPFR_RNDN);
        mpfr_set_d(r28600, l, MPFR_RNDN);
        mpfr_exp(r28601, r28600, MPFR_RNDN);
        mpfr_neg(r28602, r28600, MPFR_RNDN);
        mpfr_exp(r28603, r28602, MPFR_RNDN);
        mpfr_sub(r28604, r28601, r28603, MPFR_RNDN);
        mpfr_mul(r28605, r28599, r28604, MPFR_RNDN);
        mpfr_set_d(r28606, K, MPFR_RNDN);
        ;
        mpfr_div(r28608, r28606, r28607, MPFR_RNDN);
        mpfr_cos(r28609, r28608, MPFR_RNDN);
        mpfr_mul(r28610, r28605, r28609, MPFR_RNDN);
        mpfr_set_d(r28611, U, MPFR_RNDN);
        mpfr_add(r28612, r28610, r28611, MPFR_RNDN);
        return mpfr_get_d(r28612, MPFR_RNDN);
}

static mpfr_t r28613, r28614, r28615, r28616, r28617, r28618, r28619, r28620, r28621, r28622, r28623, r28624, r28625, r28626, r28627, r28628, r28629, r28630, r28631, r28632, r28633;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28613);
        mpfr_init_set_str(r28614, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28615);
        mpfr_init_set_str(r28616, "3", 10, MPFR_RNDN);
        mpfr_init(r28617);
        mpfr_init(r28618);
        mpfr_init_set_str(r28619, "2", 10, MPFR_RNDN);
        mpfr_init(r28620);
        mpfr_init_set_str(r28621, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r28622, "5", 10, MPFR_RNDN);
        mpfr_init(r28623);
        mpfr_init(r28624);
        mpfr_init(r28625);
        mpfr_init(r28626);
        mpfr_init(r28627);
        mpfr_init(r28628);
        mpfr_init(r28629);
        mpfr_init(r28630);
        mpfr_init(r28631);
        mpfr_init(r28632);
        mpfr_init(r28633);
}

double f_fm(double J, double l, double K, double U) {
        mpfr_set_d(r28613, J, MPFR_RNDN);
        ;
        mpfr_set_d(r28615, l, MPFR_RNDN);
        ;
        mpfr_pow(r28617, r28615, r28616, MPFR_RNDN);
        mpfr_mul(r28618, r28614, r28617, MPFR_RNDN);
        ;
        mpfr_mul(r28620, r28619, r28615, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28623, r28615, r28622, MPFR_RNDN);
        mpfr_mul(r28624, r28621, r28623, MPFR_RNDN);
        mpfr_add(r28625, r28620, r28624, MPFR_RNDN);
        mpfr_add(r28626, r28618, r28625, MPFR_RNDN);
        mpfr_mul(r28627, r28613, r28626, MPFR_RNDN);
        mpfr_set_d(r28628, K, MPFR_RNDN);
        mpfr_div(r28629, r28628, r28619, MPFR_RNDN);
        mpfr_cos(r28630, r28629, MPFR_RNDN);
        mpfr_mul(r28631, r28627, r28630, MPFR_RNDN);
        mpfr_set_d(r28632, U, MPFR_RNDN);
        mpfr_add(r28633, r28631, r28632, MPFR_RNDN);
        return mpfr_get_d(r28633, MPFR_RNDN);
}

static mpfr_t r28634, r28635, r28636, r28637, r28638, r28639, r28640, r28641, r28642, r28643, r28644, r28645, r28646, r28647, r28648, r28649, r28650, r28651, r28652, r28653, r28654;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28634);
        mpfr_init_set_str(r28635, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28636);
        mpfr_init_set_str(r28637, "3", 10, MPFR_RNDN);
        mpfr_init(r28638);
        mpfr_init(r28639);
        mpfr_init_set_str(r28640, "2", 10, MPFR_RNDN);
        mpfr_init(r28641);
        mpfr_init_set_str(r28642, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r28643, "5", 10, MPFR_RNDN);
        mpfr_init(r28644);
        mpfr_init(r28645);
        mpfr_init(r28646);
        mpfr_init(r28647);
        mpfr_init(r28648);
        mpfr_init(r28649);
        mpfr_init(r28650);
        mpfr_init(r28651);
        mpfr_init(r28652);
        mpfr_init(r28653);
        mpfr_init(r28654);
}

double f_dm(double J, double l, double K, double U) {
        mpfr_set_d(r28634, J, MPFR_RNDN);
        ;
        mpfr_set_d(r28636, l, MPFR_RNDN);
        ;
        mpfr_pow(r28638, r28636, r28637, MPFR_RNDN);
        mpfr_mul(r28639, r28635, r28638, MPFR_RNDN);
        ;
        mpfr_mul(r28641, r28640, r28636, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28644, r28636, r28643, MPFR_RNDN);
        mpfr_mul(r28645, r28642, r28644, MPFR_RNDN);
        mpfr_add(r28646, r28641, r28645, MPFR_RNDN);
        mpfr_add(r28647, r28639, r28646, MPFR_RNDN);
        mpfr_mul(r28648, r28634, r28647, MPFR_RNDN);
        mpfr_set_d(r28649, K, MPFR_RNDN);
        mpfr_div(r28650, r28649, r28640, MPFR_RNDN);
        mpfr_cos(r28651, r28650, MPFR_RNDN);
        mpfr_mul(r28652, r28648, r28651, MPFR_RNDN);
        mpfr_set_d(r28653, U, MPFR_RNDN);
        mpfr_add(r28654, r28652, r28653, MPFR_RNDN);
        return mpfr_get_d(r28654, MPFR_RNDN);
}

