#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 r23195 = J;
        float r23196 = l;
        float r23197 = exp(r23196);
        float r23198 = -r23196;
        float r23199 = exp(r23198);
        float r23200 = r23197 - r23199;
        float r23201 = r23195 * r23200;
        float r23202 = K;
        float r23203 = 2;
        float r23204 = r23202 / r23203;
        float r23205 = cos(r23204);
        float r23206 = r23201 * r23205;
        float r23207 = U;
        float r23208 = r23206 + r23207;
        return r23208;
}

double f_id(double J, double l, double K, double U) {
        double r23209 = J;
        double r23210 = l;
        double r23211 = exp(r23210);
        double r23212 = -r23210;
        double r23213 = exp(r23212);
        double r23214 = r23211 - r23213;
        double r23215 = r23209 * r23214;
        double r23216 = K;
        double r23217 = 2;
        double r23218 = r23216 / r23217;
        double r23219 = cos(r23218);
        double r23220 = r23215 * r23219;
        double r23221 = U;
        double r23222 = r23220 + r23221;
        return r23222;
}


double f_of(float J, float l, float K, float U) {
        float r23223 = K;
        float r23224 = 2;
        float r23225 = r23223 / r23224;
        float r23226 = cos(r23225);
        float r23227 = J;
        float r23228 = r23226 * r23227;
        float r23229 = l;
        float r23230 = 1/3;
        float r23231 = r23229 * r23230;
        float r23232 = fma(r23231, r23229, r23224);
        float r23233 = 5;
        float r23234 = pow(r23229, r23233);
        float r23235 = 1/60;
        float r23236 = r23234 * r23235;
        float r23237 = fma(r23229, r23232, r23236);
        float r23238 = U;
        float r23239 = fma(r23228, r23237, r23238);
        return r23239;
}

double f_od(double J, double l, double K, double U) {
        double r23240 = K;
        double r23241 = 2;
        double r23242 = r23240 / r23241;
        double r23243 = cos(r23242);
        double r23244 = J;
        double r23245 = r23243 * r23244;
        double r23246 = l;
        double r23247 = 1/3;
        double r23248 = r23246 * r23247;
        double r23249 = fma(r23248, r23246, r23241);
        double r23250 = 5;
        double r23251 = pow(r23246, r23250);
        double r23252 = 1/60;
        double r23253 = r23251 * r23252;
        double r23254 = fma(r23246, r23249, r23253);
        double r23255 = U;
        double r23256 = fma(r23245, r23254, r23255);
        return r23256;
}

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 r23257, r23258, r23259, r23260, r23261, r23262, r23263, r23264, r23265, r23266, r23267, r23268, r23269, r23270;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r23257);
        mpfr_init(r23258);
        mpfr_init(r23259);
        mpfr_init(r23260);
        mpfr_init(r23261);
        mpfr_init(r23262);
        mpfr_init(r23263);
        mpfr_init(r23264);
        mpfr_init_set_str(r23265, "2", 10, MPFR_RNDN);
        mpfr_init(r23266);
        mpfr_init(r23267);
        mpfr_init(r23268);
        mpfr_init(r23269);
        mpfr_init(r23270);
}

double f_im(double J, double l, double K, double U) {
        mpfr_set_d(r23257, J, MPFR_RNDN);
        mpfr_set_d(r23258, l, MPFR_RNDN);
        mpfr_exp(r23259, r23258, MPFR_RNDN);
        mpfr_neg(r23260, r23258, MPFR_RNDN);
        mpfr_exp(r23261, r23260, MPFR_RNDN);
        mpfr_sub(r23262, r23259, r23261, MPFR_RNDN);
        mpfr_mul(r23263, r23257, r23262, MPFR_RNDN);
        mpfr_set_d(r23264, K, MPFR_RNDN);
        ;
        mpfr_div(r23266, r23264, r23265, MPFR_RNDN);
        mpfr_cos(r23267, r23266, MPFR_RNDN);
        mpfr_mul(r23268, r23263, r23267, MPFR_RNDN);
        mpfr_set_d(r23269, U, MPFR_RNDN);
        mpfr_add(r23270, r23268, r23269, MPFR_RNDN);
        return mpfr_get_d(r23270, MPFR_RNDN);
}

static mpfr_t r23271, r23272, r23273, r23274, r23275, r23276, r23277, r23278, r23279, r23280, r23281, r23282, r23283, r23284, r23285, r23286, r23287;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r23271);
        mpfr_init_set_str(r23272, "2", 10, MPFR_RNDN);
        mpfr_init(r23273);
        mpfr_init(r23274);
        mpfr_init(r23275);
        mpfr_init(r23276);
        mpfr_init(r23277);
        mpfr_init_set_str(r23278, "1/3", 10, MPFR_RNDN);
        mpfr_init(r23279);
        mpfr_init(r23280);
        mpfr_init_set_str(r23281, "5", 10, MPFR_RNDN);
        mpfr_init(r23282);
        mpfr_init_set_str(r23283, "1/60", 10, MPFR_RNDN);
        mpfr_init(r23284);
        mpfr_init(r23285);
        mpfr_init(r23286);
        mpfr_init(r23287);
}

double f_fm(double J, double l, double K, double U) {
        mpfr_set_d(r23271, K, MPFR_RNDN);
        ;
        mpfr_div(r23273, r23271, r23272, MPFR_RNDN);
        mpfr_cos(r23274, r23273, MPFR_RNDN);
        mpfr_set_d(r23275, J, MPFR_RNDN);
        mpfr_mul(r23276, r23274, r23275, MPFR_RNDN);
        mpfr_set_d(r23277, l, MPFR_RNDN);
        ;
        mpfr_mul(r23279, r23277, r23278, MPFR_RNDN);
        mpfr_fma(r23280, r23279, r23277, r23272, MPFR_RNDN);
        ;
        mpfr_pow(r23282, r23277, r23281, MPFR_RNDN);
        ;
        mpfr_mul(r23284, r23282, r23283, MPFR_RNDN);
        mpfr_fma(r23285, r23277, r23280, r23284, MPFR_RNDN);
        mpfr_set_d(r23286, U, MPFR_RNDN);
        mpfr_fma(r23287, r23276, r23285, r23286, MPFR_RNDN);
        return mpfr_get_d(r23287, MPFR_RNDN);
}

static mpfr_t r23288, r23289, r23290, r23291, r23292, r23293, r23294, r23295, r23296, r23297, r23298, r23299, r23300, r23301, r23302, r23303, r23304;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r23288);
        mpfr_init_set_str(r23289, "2", 10, MPFR_RNDN);
        mpfr_init(r23290);
        mpfr_init(r23291);
        mpfr_init(r23292);
        mpfr_init(r23293);
        mpfr_init(r23294);
        mpfr_init_set_str(r23295, "1/3", 10, MPFR_RNDN);
        mpfr_init(r23296);
        mpfr_init(r23297);
        mpfr_init_set_str(r23298, "5", 10, MPFR_RNDN);
        mpfr_init(r23299);
        mpfr_init_set_str(r23300, "1/60", 10, MPFR_RNDN);
        mpfr_init(r23301);
        mpfr_init(r23302);
        mpfr_init(r23303);
        mpfr_init(r23304);
}

double f_dm(double J, double l, double K, double U) {
        mpfr_set_d(r23288, K, MPFR_RNDN);
        ;
        mpfr_div(r23290, r23288, r23289, MPFR_RNDN);
        mpfr_cos(r23291, r23290, MPFR_RNDN);
        mpfr_set_d(r23292, J, MPFR_RNDN);
        mpfr_mul(r23293, r23291, r23292, MPFR_RNDN);
        mpfr_set_d(r23294, l, MPFR_RNDN);
        ;
        mpfr_mul(r23296, r23294, r23295, MPFR_RNDN);
        mpfr_fma(r23297, r23296, r23294, r23289, MPFR_RNDN);
        ;
        mpfr_pow(r23299, r23294, r23298, MPFR_RNDN);
        ;
        mpfr_mul(r23301, r23299, r23300, MPFR_RNDN);
        mpfr_fma(r23302, r23294, r23297, r23301, MPFR_RNDN);
        mpfr_set_d(r23303, U, MPFR_RNDN);
        mpfr_fma(r23304, r23293, r23302, r23303, MPFR_RNDN);
        return mpfr_get_d(r23304, MPFR_RNDN);
}

