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

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

double f_if(float K, float m, float n, float M, float l) {
        float r9276 = K;
        float r9277 = m;
        float r9278 = n;
        float r9279 = r9277 + r9278;
        float r9280 = r9276 * r9279;
        float r9281 = 2.0f;
        float r9282 = r9280 / r9281;
        float r9283 = M;
        float r9284 = r9282 - r9283;
        float r9285 = cos(r9284);
        float r9286 = r9279 / r9281;
        float r9287 = r9286 - r9283;
        float r9288 = pow(r9287, r9281);
        float r9289 = -r9288;
        float r9290 = l;
        float r9291 = r9277 - r9278;
        float r9292 = fabs(r9291);
        float r9293 = r9290 - r9292;
        float r9294 = r9289 - r9293;
        float r9295 = exp(r9294);
        float r9296 = r9285 * r9295;
        return r9296;
}

double f_id(double K, double m, double n, double M, double l) {
        double r9297 = K;
        double r9298 = m;
        double r9299 = n;
        double r9300 = r9298 + r9299;
        double r9301 = r9297 * r9300;
        double r9302 = 2.0;
        double r9303 = r9301 / r9302;
        double r9304 = M;
        double r9305 = r9303 - r9304;
        double r9306 = cos(r9305);
        double r9307 = r9300 / r9302;
        double r9308 = r9307 - r9304;
        double r9309 = pow(r9308, r9302);
        double r9310 = -r9309;
        double r9311 = l;
        double r9312 = r9298 - r9299;
        double r9313 = fabs(r9312);
        double r9314 = r9311 - r9313;
        double r9315 = r9310 - r9314;
        double r9316 = exp(r9315);
        double r9317 = r9306 * r9316;
        return r9317;
}


double f_of(float __attribute__((unused)) K, float m, float n, float M, float l) {
        float r9318 = m;
        float r9319 = n;
        float r9320 = r9318 + r9319;
        float r9321 = 2.0f;
        float r9322 = r9320 / r9321;
        float r9323 = M;
        float r9324 = r9322 - r9323;
        float r9325 = pow(r9324, r9321);
        float r9326 = -r9325;
        float r9327 = l;
        float r9328 = r9318 - r9319;
        float r9329 = fabs(r9328);
        float r9330 = r9327 - r9329;
        float r9331 = r9326 - r9330;
        float r9332 = exp(r9331);
        return r9332;
}

double f_od(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r9333 = m;
        double r9334 = n;
        double r9335 = r9333 + r9334;
        double r9336 = 2.0;
        double r9337 = r9335 / r9336;
        double r9338 = M;
        double r9339 = r9337 - r9338;
        double r9340 = pow(r9339, r9336);
        double r9341 = -r9340;
        double r9342 = l;
        double r9343 = r9333 - r9334;
        double r9344 = fabs(r9343);
        double r9345 = r9342 - r9344;
        double r9346 = r9341 - r9345;
        double r9347 = exp(r9346);
        return r9347;
}

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 r9348, r9349, r9350, r9351, r9352, r9353, r9354, r9355, r9356, r9357, r9358, r9359, r9360, r9361, r9362, r9363, r9364, r9365, r9366, r9367, r9368;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1616);
        mpfr_init(r9348);
        mpfr_init(r9349);
        mpfr_init(r9350);
        mpfr_init(r9351);
        mpfr_init(r9352);
        mpfr_init_set_str(r9353, "2", 10, MPFR_RNDN);
        mpfr_init(r9354);
        mpfr_init(r9355);
        mpfr_init(r9356);
        mpfr_init(r9357);
        mpfr_init(r9358);
        mpfr_init(r9359);
        mpfr_init(r9360);
        mpfr_init(r9361);
        mpfr_init(r9362);
        mpfr_init(r9363);
        mpfr_init(r9364);
        mpfr_init(r9365);
        mpfr_init(r9366);
        mpfr_init(r9367);
        mpfr_init(r9368);
}

double f_im(double K, double m, double n, double M, double l) {
        mpfr_set_d(r9348, K, MPFR_RNDN);
        mpfr_set_d(r9349, m, MPFR_RNDN);
        mpfr_set_d(r9350, n, MPFR_RNDN);
        mpfr_add(r9351, r9349, r9350, MPFR_RNDN);
        mpfr_mul(r9352, r9348, r9351, MPFR_RNDN);
        ;
        mpfr_div(r9354, r9352, r9353, MPFR_RNDN);
        mpfr_set_d(r9355, M, MPFR_RNDN);
        mpfr_sub(r9356, r9354, r9355, MPFR_RNDN);
        mpfr_cos(r9357, r9356, MPFR_RNDN);
        mpfr_div(r9358, r9351, r9353, MPFR_RNDN);
        mpfr_sub(r9359, r9358, r9355, MPFR_RNDN);
        mpfr_pow(r9360, r9359, r9353, MPFR_RNDN);
        mpfr_neg(r9361, r9360, MPFR_RNDN);
        mpfr_set_d(r9362, l, MPFR_RNDN);
        mpfr_sub(r9363, r9349, r9350, MPFR_RNDN);
        mpfr_abs(r9364, r9363, MPFR_RNDN);
        mpfr_sub(r9365, r9362, r9364, MPFR_RNDN);
        mpfr_sub(r9366, r9361, r9365, MPFR_RNDN);
        mpfr_exp(r9367, r9366, MPFR_RNDN);
        mpfr_mul(r9368, r9357, r9367, MPFR_RNDN);
        return mpfr_get_d(r9368, MPFR_RNDN);
}

static mpfr_t r9369, r9370, r9371, r9372, r9373, r9374, r9375, r9376, r9377, r9378, r9379, r9380, r9381, r9382, r9383;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r9369);
        mpfr_init(r9370);
        mpfr_init(r9371);
        mpfr_init_set_str(r9372, "2", 10, MPFR_RNDN);
        mpfr_init(r9373);
        mpfr_init(r9374);
        mpfr_init(r9375);
        mpfr_init(r9376);
        mpfr_init(r9377);
        mpfr_init(r9378);
        mpfr_init(r9379);
        mpfr_init(r9380);
        mpfr_init(r9381);
        mpfr_init(r9382);
        mpfr_init(r9383);
}

double f_fm(double __attribute__((unused)) K, double m, double n, double M, double l) {
        mpfr_set_d(r9369, m, MPFR_RNDN);
        mpfr_set_d(r9370, n, MPFR_RNDN);
        mpfr_add(r9371, r9369, r9370, MPFR_RNDN);
        ;
        mpfr_div(r9373, r9371, r9372, MPFR_RNDN);
        mpfr_set_d(r9374, M, MPFR_RNDN);
        mpfr_sub(r9375, r9373, r9374, MPFR_RNDN);
        mpfr_pow(r9376, r9375, r9372, MPFR_RNDN);
        mpfr_neg(r9377, r9376, MPFR_RNDN);
        mpfr_set_d(r9378, l, MPFR_RNDN);
        mpfr_sub(r9379, r9369, r9370, MPFR_RNDN);
        mpfr_abs(r9380, r9379, MPFR_RNDN);
        mpfr_sub(r9381, r9378, r9380, MPFR_RNDN);
        mpfr_sub(r9382, r9377, r9381, MPFR_RNDN);
        mpfr_exp(r9383, r9382, MPFR_RNDN);
        return mpfr_get_d(r9383, MPFR_RNDN);
}

static mpfr_t r9384, r9385, r9386, r9387, r9388, r9389, r9390, r9391, r9392, r9393, r9394, r9395, r9396, r9397, r9398;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r9384);
        mpfr_init(r9385);
        mpfr_init(r9386);
        mpfr_init_set_str(r9387, "2", 10, MPFR_RNDN);
        mpfr_init(r9388);
        mpfr_init(r9389);
        mpfr_init(r9390);
        mpfr_init(r9391);
        mpfr_init(r9392);
        mpfr_init(r9393);
        mpfr_init(r9394);
        mpfr_init(r9395);
        mpfr_init(r9396);
        mpfr_init(r9397);
        mpfr_init(r9398);
}

double f_dm(double __attribute__((unused)) K, double m, double n, double M, double l) {
        mpfr_set_d(r9384, m, MPFR_RNDN);
        mpfr_set_d(r9385, n, MPFR_RNDN);
        mpfr_add(r9386, r9384, r9385, MPFR_RNDN);
        ;
        mpfr_div(r9388, r9386, r9387, MPFR_RNDN);
        mpfr_set_d(r9389, M, MPFR_RNDN);
        mpfr_sub(r9390, r9388, r9389, MPFR_RNDN);
        mpfr_pow(r9391, r9390, r9387, MPFR_RNDN);
        mpfr_neg(r9392, r9391, MPFR_RNDN);
        mpfr_set_d(r9393, l, MPFR_RNDN);
        mpfr_sub(r9394, r9384, r9385, MPFR_RNDN);
        mpfr_abs(r9395, r9394, MPFR_RNDN);
        mpfr_sub(r9396, r9393, r9395, MPFR_RNDN);
        mpfr_sub(r9397, r9392, r9396, MPFR_RNDN);
        mpfr_exp(r9398, r9397, MPFR_RNDN);
        return mpfr_get_d(r9398, MPFR_RNDN);
}

