#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 r8838 = K;
        float r8839 = m;
        float r8840 = n;
        float r8841 = r8839 + r8840;
        float r8842 = r8838 * r8841;
        float r8843 = 2.0f;
        float r8844 = r8842 / r8843;
        float r8845 = M;
        float r8846 = r8844 - r8845;
        float r8847 = cos(r8846);
        float r8848 = r8841 / r8843;
        float r8849 = r8848 - r8845;
        float r8850 = pow(r8849, r8843);
        float r8851 = -r8850;
        float r8852 = l;
        float r8853 = r8839 - r8840;
        float r8854 = fabs(r8853);
        float r8855 = r8852 - r8854;
        float r8856 = r8851 - r8855;
        float r8857 = exp(r8856);
        float r8858 = r8847 * r8857;
        return r8858;
}

double f_id(double K, double m, double n, double M, double l) {
        double r8859 = K;
        double r8860 = m;
        double r8861 = n;
        double r8862 = r8860 + r8861;
        double r8863 = r8859 * r8862;
        double r8864 = 2.0;
        double r8865 = r8863 / r8864;
        double r8866 = M;
        double r8867 = r8865 - r8866;
        double r8868 = cos(r8867);
        double r8869 = r8862 / r8864;
        double r8870 = r8869 - r8866;
        double r8871 = pow(r8870, r8864);
        double r8872 = -r8871;
        double r8873 = l;
        double r8874 = r8860 - r8861;
        double r8875 = fabs(r8874);
        double r8876 = r8873 - r8875;
        double r8877 = r8872 - r8876;
        double r8878 = exp(r8877);
        double r8879 = r8868 * r8878;
        return r8879;
}


double f_of(float __attribute__((unused)) K, float m, float n, float M, float l) {
        float r8880 = m;
        float r8881 = n;
        float r8882 = r8880 + r8881;
        float r8883 = 2.0f;
        float r8884 = r8882 / r8883;
        float r8885 = M;
        float r8886 = r8884 - r8885;
        float r8887 = pow(r8886, r8883);
        float r8888 = -r8887;
        float r8889 = l;
        float r8890 = r8880 - r8881;
        float r8891 = fabs(r8890);
        float r8892 = r8889 - r8891;
        float r8893 = r8888 - r8892;
        float r8894 = exp(r8893);
        return r8894;
}

double f_od(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r8895 = m;
        double r8896 = n;
        double r8897 = r8895 + r8896;
        double r8898 = 2.0;
        double r8899 = r8897 / r8898;
        double r8900 = M;
        double r8901 = r8899 - r8900;
        double r8902 = pow(r8901, r8898);
        double r8903 = -r8902;
        double r8904 = l;
        double r8905 = r8895 - r8896;
        double r8906 = fabs(r8905);
        double r8907 = r8904 - r8906;
        double r8908 = r8903 - r8907;
        double r8909 = exp(r8908);
        return r8909;
}

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 r8910, r8911, r8912, r8913, r8914, r8915, r8916, r8917, r8918, r8919, r8920, r8921, r8922, r8923, r8924, r8925, r8926, r8927, r8928, r8929, r8930;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1616);
        mpfr_init(r8910);
        mpfr_init(r8911);
        mpfr_init(r8912);
        mpfr_init(r8913);
        mpfr_init(r8914);
        mpfr_init_set_str(r8915, "2", 10, MPFR_RNDN);
        mpfr_init(r8916);
        mpfr_init(r8917);
        mpfr_init(r8918);
        mpfr_init(r8919);
        mpfr_init(r8920);
        mpfr_init(r8921);
        mpfr_init(r8922);
        mpfr_init(r8923);
        mpfr_init(r8924);
        mpfr_init(r8925);
        mpfr_init(r8926);
        mpfr_init(r8927);
        mpfr_init(r8928);
        mpfr_init(r8929);
        mpfr_init(r8930);
}

double f_im(double K, double m, double n, double M, double l) {
        mpfr_set_d(r8910, K, MPFR_RNDN);
        mpfr_set_d(r8911, m, MPFR_RNDN);
        mpfr_set_d(r8912, n, MPFR_RNDN);
        mpfr_add(r8913, r8911, r8912, MPFR_RNDN);
        mpfr_mul(r8914, r8910, r8913, MPFR_RNDN);
        ;
        mpfr_div(r8916, r8914, r8915, MPFR_RNDN);
        mpfr_set_d(r8917, M, MPFR_RNDN);
        mpfr_sub(r8918, r8916, r8917, MPFR_RNDN);
        mpfr_cos(r8919, r8918, MPFR_RNDN);
        mpfr_div(r8920, r8913, r8915, MPFR_RNDN);
        mpfr_sub(r8921, r8920, r8917, MPFR_RNDN);
        mpfr_pow(r8922, r8921, r8915, MPFR_RNDN);
        mpfr_neg(r8923, r8922, MPFR_RNDN);
        mpfr_set_d(r8924, l, MPFR_RNDN);
        mpfr_sub(r8925, r8911, r8912, MPFR_RNDN);
        mpfr_abs(r8926, r8925, MPFR_RNDN);
        mpfr_sub(r8927, r8924, r8926, MPFR_RNDN);
        mpfr_sub(r8928, r8923, r8927, MPFR_RNDN);
        mpfr_exp(r8929, r8928, MPFR_RNDN);
        mpfr_mul(r8930, r8919, r8929, MPFR_RNDN);
        return mpfr_get_d(r8930, MPFR_RNDN);
}

static mpfr_t r8931, r8932, r8933, r8934, r8935, r8936, r8937, r8938, r8939, r8940, r8941, r8942, r8943, r8944, r8945;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r8931);
        mpfr_init(r8932);
        mpfr_init(r8933);
        mpfr_init_set_str(r8934, "2", 10, MPFR_RNDN);
        mpfr_init(r8935);
        mpfr_init(r8936);
        mpfr_init(r8937);
        mpfr_init(r8938);
        mpfr_init(r8939);
        mpfr_init(r8940);
        mpfr_init(r8941);
        mpfr_init(r8942);
        mpfr_init(r8943);
        mpfr_init(r8944);
        mpfr_init(r8945);
}

double f_fm(double __attribute__((unused)) K, double m, double n, double M, double l) {
        mpfr_set_d(r8931, m, MPFR_RNDN);
        mpfr_set_d(r8932, n, MPFR_RNDN);
        mpfr_add(r8933, r8931, r8932, MPFR_RNDN);
        ;
        mpfr_div(r8935, r8933, r8934, MPFR_RNDN);
        mpfr_set_d(r8936, M, MPFR_RNDN);
        mpfr_sub(r8937, r8935, r8936, MPFR_RNDN);
        mpfr_pow(r8938, r8937, r8934, MPFR_RNDN);
        mpfr_neg(r8939, r8938, MPFR_RNDN);
        mpfr_set_d(r8940, l, MPFR_RNDN);
        mpfr_sub(r8941, r8931, r8932, MPFR_RNDN);
        mpfr_abs(r8942, r8941, MPFR_RNDN);
        mpfr_sub(r8943, r8940, r8942, MPFR_RNDN);
        mpfr_sub(r8944, r8939, r8943, MPFR_RNDN);
        mpfr_exp(r8945, r8944, MPFR_RNDN);
        return mpfr_get_d(r8945, MPFR_RNDN);
}

static mpfr_t r8946, r8947, r8948, r8949, r8950, r8951, r8952, r8953, r8954, r8955, r8956, r8957, r8958, r8959, r8960;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r8946);
        mpfr_init(r8947);
        mpfr_init(r8948);
        mpfr_init_set_str(r8949, "2", 10, MPFR_RNDN);
        mpfr_init(r8950);
        mpfr_init(r8951);
        mpfr_init(r8952);
        mpfr_init(r8953);
        mpfr_init(r8954);
        mpfr_init(r8955);
        mpfr_init(r8956);
        mpfr_init(r8957);
        mpfr_init(r8958);
        mpfr_init(r8959);
        mpfr_init(r8960);
}

double f_dm(double __attribute__((unused)) K, double m, double n, double M, double l) {
        mpfr_set_d(r8946, m, MPFR_RNDN);
        mpfr_set_d(r8947, n, MPFR_RNDN);
        mpfr_add(r8948, r8946, r8947, MPFR_RNDN);
        ;
        mpfr_div(r8950, r8948, r8949, MPFR_RNDN);
        mpfr_set_d(r8951, M, MPFR_RNDN);
        mpfr_sub(r8952, r8950, r8951, MPFR_RNDN);
        mpfr_pow(r8953, r8952, r8949, MPFR_RNDN);
        mpfr_neg(r8954, r8953, MPFR_RNDN);
        mpfr_set_d(r8955, l, MPFR_RNDN);
        mpfr_sub(r8956, r8946, r8947, MPFR_RNDN);
        mpfr_abs(r8957, r8956, MPFR_RNDN);
        mpfr_sub(r8958, r8955, r8957, MPFR_RNDN);
        mpfr_sub(r8959, r8954, r8958, MPFR_RNDN);
        mpfr_exp(r8960, r8959, MPFR_RNDN);
        return mpfr_get_d(r8960, MPFR_RNDN);
}

