#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 r10073 = K;
        float r10074 = m;
        float r10075 = n;
        float r10076 = r10074 + r10075;
        float r10077 = r10073 * r10076;
        float r10078 = 2;
        float r10079 = r10077 / r10078;
        float r10080 = M;
        float r10081 = r10079 - r10080;
        float r10082 = cos(r10081);
        float r10083 = r10076 / r10078;
        float r10084 = r10083 - r10080;
        float r10085 = pow(r10084, r10078);
        float r10086 = -r10085;
        float r10087 = l;
        float r10088 = r10074 - r10075;
        float r10089 = fabs(r10088);
        float r10090 = r10087 - r10089;
        float r10091 = r10086 - r10090;
        float r10092 = exp(r10091);
        float r10093 = r10082 * r10092;
        return r10093;
}

double f_id(double K, double m, double n, double M, double l) {
        double r10094 = K;
        double r10095 = m;
        double r10096 = n;
        double r10097 = r10095 + r10096;
        double r10098 = r10094 * r10097;
        double r10099 = 2;
        double r10100 = r10098 / r10099;
        double r10101 = M;
        double r10102 = r10100 - r10101;
        double r10103 = cos(r10102);
        double r10104 = r10097 / r10099;
        double r10105 = r10104 - r10101;
        double r10106 = pow(r10105, r10099);
        double r10107 = -r10106;
        double r10108 = l;
        double r10109 = r10095 - r10096;
        double r10110 = fabs(r10109);
        double r10111 = r10108 - r10110;
        double r10112 = r10107 - r10111;
        double r10113 = exp(r10112);
        double r10114 = r10103 * r10113;
        return r10114;
}


double f_of(float __attribute__((unused)) K, float m, float n, float M, float l) {
        float r10115 = n;
        float r10116 = m;
        float r10117 = r10115 + r10116;
        float r10118 = 2;
        float r10119 = r10117 / r10118;
        float r10120 = M;
        float r10121 = r10119 - r10120;
        float r10122 = pow(r10121, r10118);
        float r10123 = -r10122;
        float r10124 = l;
        float r10125 = r10116 - r10115;
        float r10126 = fabs(r10125);
        float r10127 = r10124 - r10126;
        float r10128 = r10123 - r10127;
        float r10129 = exp(r10128);
        return r10129;
}

double f_od(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r10130 = n;
        double r10131 = m;
        double r10132 = r10130 + r10131;
        double r10133 = 2;
        double r10134 = r10132 / r10133;
        double r10135 = M;
        double r10136 = r10134 - r10135;
        double r10137 = pow(r10136, r10133);
        double r10138 = -r10137;
        double r10139 = l;
        double r10140 = r10131 - r10130;
        double r10141 = fabs(r10140);
        double r10142 = r10139 - r10141;
        double r10143 = r10138 - r10142;
        double r10144 = exp(r10143);
        return r10144;
}

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 r10145, r10146, r10147, r10148, r10149, r10150, r10151, r10152, r10153, r10154, r10155, r10156, r10157, r10158, r10159, r10160, r10161, r10162, r10163, r10164, r10165;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1616);
        mpfr_init(r10145);
        mpfr_init(r10146);
        mpfr_init(r10147);
        mpfr_init(r10148);
        mpfr_init(r10149);
        mpfr_init_set_str(r10150, "2", 10, MPFR_RNDN);
        mpfr_init(r10151);
        mpfr_init(r10152);
        mpfr_init(r10153);
        mpfr_init(r10154);
        mpfr_init(r10155);
        mpfr_init(r10156);
        mpfr_init(r10157);
        mpfr_init(r10158);
        mpfr_init(r10159);
        mpfr_init(r10160);
        mpfr_init(r10161);
        mpfr_init(r10162);
        mpfr_init(r10163);
        mpfr_init(r10164);
        mpfr_init(r10165);
}

double f_im(double K, double m, double n, double M, double l) {
        mpfr_set_d(r10145, K, MPFR_RNDN);
        mpfr_set_d(r10146, m, MPFR_RNDN);
        mpfr_set_d(r10147, n, MPFR_RNDN);
        mpfr_add(r10148, r10146, r10147, MPFR_RNDN);
        mpfr_mul(r10149, r10145, r10148, MPFR_RNDN);
        ;
        mpfr_div(r10151, r10149, r10150, MPFR_RNDN);
        mpfr_set_d(r10152, M, MPFR_RNDN);
        mpfr_sub(r10153, r10151, r10152, MPFR_RNDN);
        mpfr_cos(r10154, r10153, MPFR_RNDN);
        mpfr_div(r10155, r10148, r10150, MPFR_RNDN);
        mpfr_sub(r10156, r10155, r10152, MPFR_RNDN);
        mpfr_pow(r10157, r10156, r10150, MPFR_RNDN);
        mpfr_neg(r10158, r10157, MPFR_RNDN);
        mpfr_set_d(r10159, l, MPFR_RNDN);
        mpfr_sub(r10160, r10146, r10147, MPFR_RNDN);
        mpfr_abs(r10161, r10160, MPFR_RNDN);
        mpfr_sub(r10162, r10159, r10161, MPFR_RNDN);
        mpfr_sub(r10163, r10158, r10162, MPFR_RNDN);
        mpfr_exp(r10164, r10163, MPFR_RNDN);
        mpfr_mul(r10165, r10154, r10164, MPFR_RNDN);
        return mpfr_get_d(r10165, MPFR_RNDN);
}

static mpfr_t r10166, r10167, r10168, r10169, r10170, r10171, r10172, r10173, r10174, r10175, r10176, r10177, r10178, r10179, r10180;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r10166);
        mpfr_init(r10167);
        mpfr_init(r10168);
        mpfr_init_set_str(r10169, "2", 10, MPFR_RNDN);
        mpfr_init(r10170);
        mpfr_init(r10171);
        mpfr_init(r10172);
        mpfr_init(r10173);
        mpfr_init(r10174);
        mpfr_init(r10175);
        mpfr_init(r10176);
        mpfr_init(r10177);
        mpfr_init(r10178);
        mpfr_init(r10179);
        mpfr_init(r10180);
}

double f_fm(double __attribute__((unused)) K, double m, double n, double M, double l) {
        mpfr_set_d(r10166, n, MPFR_RNDN);
        mpfr_set_d(r10167, m, MPFR_RNDN);
        mpfr_add(r10168, r10166, r10167, MPFR_RNDN);
        ;
        mpfr_div(r10170, r10168, r10169, MPFR_RNDN);
        mpfr_set_d(r10171, M, MPFR_RNDN);
        mpfr_sub(r10172, r10170, r10171, MPFR_RNDN);
        mpfr_pow(r10173, r10172, r10169, MPFR_RNDN);
        mpfr_neg(r10174, r10173, MPFR_RNDN);
        mpfr_set_d(r10175, l, MPFR_RNDN);
        mpfr_sub(r10176, r10167, r10166, MPFR_RNDN);
        mpfr_abs(r10177, r10176, MPFR_RNDN);
        mpfr_sub(r10178, r10175, r10177, MPFR_RNDN);
        mpfr_sub(r10179, r10174, r10178, MPFR_RNDN);
        mpfr_exp(r10180, r10179, MPFR_RNDN);
        return mpfr_get_d(r10180, MPFR_RNDN);
}

static mpfr_t r10181, r10182, r10183, r10184, r10185, r10186, r10187, r10188, r10189, r10190, r10191, r10192, r10193, r10194, r10195;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r10181);
        mpfr_init(r10182);
        mpfr_init(r10183);
        mpfr_init_set_str(r10184, "2", 10, MPFR_RNDN);
        mpfr_init(r10185);
        mpfr_init(r10186);
        mpfr_init(r10187);
        mpfr_init(r10188);
        mpfr_init(r10189);
        mpfr_init(r10190);
        mpfr_init(r10191);
        mpfr_init(r10192);
        mpfr_init(r10193);
        mpfr_init(r10194);
        mpfr_init(r10195);
}

double f_dm(double __attribute__((unused)) K, double m, double n, double M, double l) {
        mpfr_set_d(r10181, n, MPFR_RNDN);
        mpfr_set_d(r10182, m, MPFR_RNDN);
        mpfr_add(r10183, r10181, r10182, MPFR_RNDN);
        ;
        mpfr_div(r10185, r10183, r10184, MPFR_RNDN);
        mpfr_set_d(r10186, M, MPFR_RNDN);
        mpfr_sub(r10187, r10185, r10186, MPFR_RNDN);
        mpfr_pow(r10188, r10187, r10184, MPFR_RNDN);
        mpfr_neg(r10189, r10188, MPFR_RNDN);
        mpfr_set_d(r10190, l, MPFR_RNDN);
        mpfr_sub(r10191, r10182, r10181, MPFR_RNDN);
        mpfr_abs(r10192, r10191, MPFR_RNDN);
        mpfr_sub(r10193, r10190, r10192, MPFR_RNDN);
        mpfr_sub(r10194, r10189, r10193, MPFR_RNDN);
        mpfr_exp(r10195, r10194, MPFR_RNDN);
        return mpfr_get_d(r10195, MPFR_RNDN);
}

