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

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

double f_if(float J, float K, float U) {
        float r27058 = -2.0f;
        float r27059 = J;
        float r27060 = r27058 * r27059;
        float r27061 = K;
        float r27062 = 2.0f;
        float r27063 = r27061 / r27062;
        float r27064 = cos(r27063);
        float r27065 = r27060 * r27064;
        float r27066 = 1.0f;
        float r27067 = U;
        float r27068 = r27062 * r27059;
        float r27069 = r27068 * r27064;
        float r27070 = r27067 / r27069;
        float r27071 = r27070 * r27070;
        float r27072 = r27066 + r27071;
        float r27073 = sqrt(r27072);
        float r27074 = r27065 * r27073;
        return r27074;
}

double f_id(double J, double K, double U) {
        double r27075 = -2.0;
        double r27076 = J;
        double r27077 = r27075 * r27076;
        double r27078 = K;
        double r27079 = 2.0;
        double r27080 = r27078 / r27079;
        double r27081 = cos(r27080);
        double r27082 = r27077 * r27081;
        double r27083 = 1.0;
        double r27084 = U;
        double r27085 = r27079 * r27076;
        double r27086 = r27085 * r27081;
        double r27087 = r27084 / r27086;
        double r27088 = r27087 * r27087;
        double r27089 = r27083 + r27088;
        double r27090 = sqrt(r27089);
        double r27091 = r27082 * r27090;
        return r27091;
}


double f_of(float J, float K, float U) {
        float r27092 = U;
        float r27093 = 2.0f;
        float r27094 = J;
        float r27095 = r27093 * r27094;
        float r27096 = K;
        float r27097 = r27096 / r27093;
        float r27098 = cos(r27097);
        float r27099 = r27095 * r27098;
        float r27100 = r27092 / r27099;
        float r27101 = 1.8969164030706211e+155f;
        bool r27102 = r27100 <= r27101;
        float r27103 = -2.0f;
        float r27104 = r27103 * r27094;
        float r27105 = r27104 * r27098;
        float r27106 = 1.0f;
        float r27107 = r27100 * r27100;
        float r27108 = r27106 + r27107;
        float r27109 = sqrt(r27108);
        float r27110 = r27105 * r27109;
        float r27111 = cbrt(r27104);
        float r27112 = cbrt(r27092);
        float r27113 = r27111 * r27112;
        float r27114 = 0.3333333333333333f;
        float r27115 = exp(r27114);
        float r27116 = 0.5f;
        float r27117 = log(r27116);
        float r27118 = log(r27094);
        float r27119 = r27117 - r27118;
        float r27120 = pow(r27115, r27119);
        float r27121 = r27113 * r27120;
        float r27122 = r27121 * (r27121 * r27121);
        float r27123 = r27102 ? r27110 : r27122;
        return r27123;
}

double f_od(double J, double K, double U) {
        double r27124 = U;
        double r27125 = 2.0;
        double r27126 = J;
        double r27127 = r27125 * r27126;
        double r27128 = K;
        double r27129 = r27128 / r27125;
        double r27130 = cos(r27129);
        double r27131 = r27127 * r27130;
        double r27132 = r27124 / r27131;
        double r27133 = 1.8969164030706211e+155;
        bool r27134 = r27132 <= r27133;
        double r27135 = -2.0;
        double r27136 = r27135 * r27126;
        double r27137 = r27136 * r27130;
        double r27138 = 1.0;
        double r27139 = r27132 * r27132;
        double r27140 = r27138 + r27139;
        double r27141 = sqrt(r27140);
        double r27142 = r27137 * r27141;
        double r27143 = cbrt(r27136);
        double r27144 = cbrt(r27124);
        double r27145 = r27143 * r27144;
        double r27146 = 0.3333333333333333;
        double r27147 = exp(r27146);
        double r27148 = 0.5;
        double r27149 = log(r27148);
        double r27150 = log(r27126);
        double r27151 = r27149 - r27150;
        double r27152 = pow(r27147, r27151);
        double r27153 = r27145 * r27152;
        double r27154 = r27153 * (r27153 * r27153);
        double r27155 = r27134 ? r27142 : r27154;
        return r27155;
}

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 r27156, r27157, r27158, r27159, r27160, r27161, r27162, r27163, r27164, r27165, r27166, r27167, r27168, r27169, r27170, r27171, r27172;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r27156, "-2", 10, MPFR_RNDN);
        mpfr_init(r27157);
        mpfr_init(r27158);
        mpfr_init(r27159);
        mpfr_init_set_str(r27160, "2", 10, MPFR_RNDN);
        mpfr_init(r27161);
        mpfr_init(r27162);
        mpfr_init(r27163);
        mpfr_init_set_str(r27164, "1", 10, MPFR_RNDN);
        mpfr_init(r27165);
        mpfr_init(r27166);
        mpfr_init(r27167);
        mpfr_init(r27168);
        mpfr_init(r27169);
        mpfr_init(r27170);
        mpfr_init(r27171);
        mpfr_init(r27172);
}

double f_im(double J, double K, double U) {
        ;
        mpfr_set_d(r27157, J, MPFR_RNDN);
        mpfr_mul(r27158, r27156, r27157, MPFR_RNDN);
        mpfr_set_d(r27159, K, MPFR_RNDN);
        ;
        mpfr_div(r27161, r27159, r27160, MPFR_RNDN);
        mpfr_cos(r27162, r27161, MPFR_RNDN);
        mpfr_mul(r27163, r27158, r27162, MPFR_RNDN);
        ;
        mpfr_set_d(r27165, U, MPFR_RNDN);
        mpfr_mul(r27166, r27160, r27157, MPFR_RNDN);
        mpfr_mul(r27167, r27166, r27162, MPFR_RNDN);
        mpfr_div(r27168, r27165, r27167, MPFR_RNDN);
        mpfr_sqr(r27169, r27168, MPFR_RNDN);
        mpfr_add(r27170, r27164, r27169, MPFR_RNDN);
        mpfr_sqrt(r27171, r27170, MPFR_RNDN);
        mpfr_mul(r27172, r27163, r27171, MPFR_RNDN);
        return mpfr_get_d(r27172, MPFR_RNDN);
}

static mpfr_t r27173, r27174, r27175, r27176, r27177, r27178, r27179, r27180, r27181, r27182, r27183, r27184, r27185, r27186, r27187, r27188, r27189, r27190, r27191, r27192, r27193, r27194, r27195, r27196, r27197, r27198, r27199, r27200, r27201, r27202, r27203, r27204;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r27173);
        mpfr_init_set_str(r27174, "2", 10, MPFR_RNDN);
        mpfr_init(r27175);
        mpfr_init(r27176);
        mpfr_init(r27177);
        mpfr_init(r27178);
        mpfr_init(r27179);
        mpfr_init(r27180);
        mpfr_init(r27181);
        mpfr_init_set_str(r27182, "1.8969164030706211e+155", 10, MPFR_RNDN);
        mpfr_init(r27183);
        mpfr_init_set_str(r27184, "-2", 10, MPFR_RNDN);
        mpfr_init(r27185);
        mpfr_init(r27186);
        mpfr_init_set_str(r27187, "1", 10, MPFR_RNDN);
        mpfr_init(r27188);
        mpfr_init(r27189);
        mpfr_init(r27190);
        mpfr_init(r27191);
        mpfr_init(r27192);
        mpfr_init(r27193);
        mpfr_init(r27194);
        mpfr_init_set_str(r27195, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27196);
        mpfr_init_set_str(r27197, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27198);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
        mpfr_init(r27203);
        mpfr_init(r27204);
}

double f_fm(double J, double K, double U) {
        mpfr_set_d(r27173, U, MPFR_RNDN);
        ;
        mpfr_set_d(r27175, J, MPFR_RNDN);
        mpfr_mul(r27176, r27174, r27175, MPFR_RNDN);
        mpfr_set_d(r27177, K, MPFR_RNDN);
        mpfr_div(r27178, r27177, r27174, MPFR_RNDN);
        mpfr_cos(r27179, r27178, MPFR_RNDN);
        mpfr_mul(r27180, r27176, r27179, MPFR_RNDN);
        mpfr_div(r27181, r27173, r27180, MPFR_RNDN);
        ;
        mpfr_set_si(r27183, mpfr_cmp(r27181, r27182) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27185, r27184, r27175, MPFR_RNDN);
        mpfr_mul(r27186, r27185, r27179, MPFR_RNDN);
        ;
        mpfr_sqr(r27188, r27181, MPFR_RNDN);
        mpfr_add(r27189, r27187, r27188, MPFR_RNDN);
        mpfr_sqrt(r27190, r27189, MPFR_RNDN);
        mpfr_mul(r27191, r27186, r27190, MPFR_RNDN);
        mpfr_cbrt(r27192, r27185, MPFR_RNDN);
        mpfr_cbrt(r27193, r27173, MPFR_RNDN);
        mpfr_mul(r27194, r27192, r27193, MPFR_RNDN);
        ;
        mpfr_exp(r27196, r27195, MPFR_RNDN);
        ;
        mpfr_log(r27198, r27197, MPFR_RNDN);
        mpfr_log(r27199, r27175, MPFR_RNDN);
        mpfr_sub(r27200, r27198, r27199, MPFR_RNDN);
        mpfr_pow(r27201, r27196, r27200, MPFR_RNDN);
        mpfr_mul(r27202, r27194, r27201, MPFR_RNDN);
        mpfr_mul(r27203, r27202, r27202, MPFR_RNDN); mpfr_mul(r27203, r27203, r27202, MPFR_RNDN);
        if (mpfr_get_si(r27183, MPFR_RNDN)) { mpfr_set(r27204, r27191, MPFR_RNDN); } else { mpfr_set(r27204, r27203, MPFR_RNDN); };
        return mpfr_get_d(r27204, MPFR_RNDN);
}

static mpfr_t r27205, r27206, r27207, r27208, r27209, r27210, r27211, r27212, r27213, r27214, r27215, r27216, r27217, r27218, r27219, r27220, r27221, r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229, r27230, r27231, r27232, r27233, r27234, r27235, r27236;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r27205);
        mpfr_init_set_str(r27206, "2", 10, MPFR_RNDN);
        mpfr_init(r27207);
        mpfr_init(r27208);
        mpfr_init(r27209);
        mpfr_init(r27210);
        mpfr_init(r27211);
        mpfr_init(r27212);
        mpfr_init(r27213);
        mpfr_init_set_str(r27214, "1.8969164030706211e+155", 10, MPFR_RNDN);
        mpfr_init(r27215);
        mpfr_init_set_str(r27216, "-2", 10, MPFR_RNDN);
        mpfr_init(r27217);
        mpfr_init(r27218);
        mpfr_init_set_str(r27219, "1", 10, MPFR_RNDN);
        mpfr_init(r27220);
        mpfr_init(r27221);
        mpfr_init(r27222);
        mpfr_init(r27223);
        mpfr_init(r27224);
        mpfr_init(r27225);
        mpfr_init(r27226);
        mpfr_init_set_str(r27227, "1/3", 10, MPFR_RNDN);
        mpfr_init(r27228);
        mpfr_init_set_str(r27229, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27230);
        mpfr_init(r27231);
        mpfr_init(r27232);
        mpfr_init(r27233);
        mpfr_init(r27234);
        mpfr_init(r27235);
        mpfr_init(r27236);
}

double f_dm(double J, double K, double U) {
        mpfr_set_d(r27205, U, MPFR_RNDN);
        ;
        mpfr_set_d(r27207, J, MPFR_RNDN);
        mpfr_mul(r27208, r27206, r27207, MPFR_RNDN);
        mpfr_set_d(r27209, K, MPFR_RNDN);
        mpfr_div(r27210, r27209, r27206, MPFR_RNDN);
        mpfr_cos(r27211, r27210, MPFR_RNDN);
        mpfr_mul(r27212, r27208, r27211, MPFR_RNDN);
        mpfr_div(r27213, r27205, r27212, MPFR_RNDN);
        ;
        mpfr_set_si(r27215, mpfr_cmp(r27213, r27214) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27217, r27216, r27207, MPFR_RNDN);
        mpfr_mul(r27218, r27217, r27211, MPFR_RNDN);
        ;
        mpfr_sqr(r27220, r27213, MPFR_RNDN);
        mpfr_add(r27221, r27219, r27220, MPFR_RNDN);
        mpfr_sqrt(r27222, r27221, MPFR_RNDN);
        mpfr_mul(r27223, r27218, r27222, MPFR_RNDN);
        mpfr_cbrt(r27224, r27217, MPFR_RNDN);
        mpfr_cbrt(r27225, r27205, MPFR_RNDN);
        mpfr_mul(r27226, r27224, r27225, MPFR_RNDN);
        ;
        mpfr_exp(r27228, r27227, MPFR_RNDN);
        ;
        mpfr_log(r27230, r27229, MPFR_RNDN);
        mpfr_log(r27231, r27207, MPFR_RNDN);
        mpfr_sub(r27232, r27230, r27231, MPFR_RNDN);
        mpfr_pow(r27233, r27228, r27232, MPFR_RNDN);
        mpfr_mul(r27234, r27226, r27233, MPFR_RNDN);
        mpfr_mul(r27235, r27234, r27234, MPFR_RNDN); mpfr_mul(r27235, r27235, r27234, MPFR_RNDN);
        if (mpfr_get_si(r27215, MPFR_RNDN)) { mpfr_set(r27236, r27223, MPFR_RNDN); } else { mpfr_set(r27236, r27235, MPFR_RNDN); };
        return mpfr_get_d(r27236, MPFR_RNDN);
}

