#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 r9835 = K;
        float r9836 = m;
        float r9837 = n;
        float r9838 = r9836 + r9837;
        float r9839 = r9835 * r9838;
        float r9840 = 2;
        float r9841 = r9839 / r9840;
        float r9842 = M;
        float r9843 = r9841 - r9842;
        float r9844 = cos(r9843);
        float r9845 = r9838 / r9840;
        float r9846 = r9845 - r9842;
        float r9847 = pow(r9846, r9840);
        float r9848 = -r9847;
        float r9849 = l;
        float r9850 = r9836 - r9837;
        float r9851 = fabs(r9850);
        float r9852 = r9849 - r9851;
        float r9853 = r9848 - r9852;
        float r9854 = exp(r9853);
        float r9855 = r9844 * r9854;
        return r9855;
}

double f_id(double K, double m, double n, double M, double l) {
        double r9856 = K;
        double r9857 = m;
        double r9858 = n;
        double r9859 = r9857 + r9858;
        double r9860 = r9856 * r9859;
        double r9861 = 2;
        double r9862 = r9860 / r9861;
        double r9863 = M;
        double r9864 = r9862 - r9863;
        double r9865 = cos(r9864);
        double r9866 = r9859 / r9861;
        double r9867 = r9866 - r9863;
        double r9868 = pow(r9867, r9861);
        double r9869 = -r9868;
        double r9870 = l;
        double r9871 = r9857 - r9858;
        double r9872 = fabs(r9871);
        double r9873 = r9870 - r9872;
        double r9874 = r9869 - r9873;
        double r9875 = exp(r9874);
        double r9876 = r9865 * r9875;
        return r9876;
}


double f_of(float __attribute__((unused)) K, float m, float n, float M, float l) {
        float r9877 = m;
        float r9878 = n;
        float r9879 = r9877 + r9878;
        float r9880 = 2;
        float r9881 = r9879 / r9880;
        float r9882 = M;
        float r9883 = r9881 - r9882;
        float r9884 = pow(r9883, r9880);
        float r9885 = -r9884;
        float r9886 = l;
        float r9887 = r9877 - r9878;
        float r9888 = fabs(r9887);
        float r9889 = r9886 - r9888;
        float r9890 = r9885 - r9889;
        float r9891 = exp(r9890);
        return r9891;
}

double f_od(double __attribute__((unused)) K, double m, double n, double M, double l) {
        double r9892 = m;
        double r9893 = n;
        double r9894 = r9892 + r9893;
        double r9895 = 2;
        double r9896 = r9894 / r9895;
        double r9897 = M;
        double r9898 = r9896 - r9897;
        double r9899 = pow(r9898, r9895);
        double r9900 = -r9899;
        double r9901 = l;
        double r9902 = r9892 - r9893;
        double r9903 = fabs(r9902);
        double r9904 = r9901 - r9903;
        double r9905 = r9900 - r9904;
        double r9906 = exp(r9905);
        return r9906;
}

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 r9907, r9908, r9909, r9910, r9911, r9912, r9913, r9914, r9915, r9916, r9917, r9918, r9919, r9920, r9921, r9922, r9923, r9924, r9925, r9926, r9927;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1616);
        mpfr_init(r9907);
        mpfr_init(r9908);
        mpfr_init(r9909);
        mpfr_init(r9910);
        mpfr_init(r9911);
        mpfr_init_set_str(r9912, "2", 10, MPFR_RNDN);
        mpfr_init(r9913);
        mpfr_init(r9914);
        mpfr_init(r9915);
        mpfr_init(r9916);
        mpfr_init(r9917);
        mpfr_init(r9918);
        mpfr_init(r9919);
        mpfr_init(r9920);
        mpfr_init(r9921);
        mpfr_init(r9922);
        mpfr_init(r9923);
        mpfr_init(r9924);
        mpfr_init(r9925);
        mpfr_init(r9926);
        mpfr_init(r9927);
}

double f_im(double K, double m, double n, double M, double l) {
        mpfr_set_d(r9907, K, MPFR_RNDN);
        mpfr_set_d(r9908, m, MPFR_RNDN);
        mpfr_set_d(r9909, n, MPFR_RNDN);
        mpfr_add(r9910, r9908, r9909, MPFR_RNDN);
        mpfr_mul(r9911, r9907, r9910, MPFR_RNDN);
        ;
        mpfr_div(r9913, r9911, r9912, MPFR_RNDN);
        mpfr_set_d(r9914, M, MPFR_RNDN);
        mpfr_sub(r9915, r9913, r9914, MPFR_RNDN);
        mpfr_cos(r9916, r9915, MPFR_RNDN);
        mpfr_div(r9917, r9910, r9912, MPFR_RNDN);
        mpfr_sub(r9918, r9917, r9914, MPFR_RNDN);
        mpfr_pow(r9919, r9918, r9912, MPFR_RNDN);
        mpfr_neg(r9920, r9919, MPFR_RNDN);
        mpfr_set_d(r9921, l, MPFR_RNDN);
        mpfr_sub(r9922, r9908, r9909, MPFR_RNDN);
        mpfr_abs(r9923, r9922, MPFR_RNDN);
        mpfr_sub(r9924, r9921, r9923, MPFR_RNDN);
        mpfr_sub(r9925, r9920, r9924, MPFR_RNDN);
        mpfr_exp(r9926, r9925, MPFR_RNDN);
        mpfr_mul(r9927, r9916, r9926, MPFR_RNDN);
        return mpfr_get_d(r9927, MPFR_RNDN);
}

static mpfr_t r9928, r9929, r9930, r9931, r9932, r9933, r9934, r9935, r9936, r9937, r9938, r9939, r9940, r9941, r9942;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r9928);
        mpfr_init(r9929);
        mpfr_init(r9930);
        mpfr_init_set_str(r9931, "2", 10, MPFR_RNDN);
        mpfr_init(r9932);
        mpfr_init(r9933);
        mpfr_init(r9934);
        mpfr_init(r9935);
        mpfr_init(r9936);
        mpfr_init(r9937);
        mpfr_init(r9938);
        mpfr_init(r9939);
        mpfr_init(r9940);
        mpfr_init(r9941);
        mpfr_init(r9942);
}

double f_fm(double __attribute__((unused)) K, double m, double n, double M, double l) {
        mpfr_set_d(r9928, m, MPFR_RNDN);
        mpfr_set_d(r9929, n, MPFR_RNDN);
        mpfr_add(r9930, r9928, r9929, MPFR_RNDN);
        ;
        mpfr_div(r9932, r9930, r9931, MPFR_RNDN);
        mpfr_set_d(r9933, M, MPFR_RNDN);
        mpfr_sub(r9934, r9932, r9933, MPFR_RNDN);
        mpfr_pow(r9935, r9934, r9931, MPFR_RNDN);
        mpfr_neg(r9936, r9935, MPFR_RNDN);
        mpfr_set_d(r9937, l, MPFR_RNDN);
        mpfr_sub(r9938, r9928, r9929, MPFR_RNDN);
        mpfr_abs(r9939, r9938, MPFR_RNDN);
        mpfr_sub(r9940, r9937, r9939, MPFR_RNDN);
        mpfr_sub(r9941, r9936, r9940, MPFR_RNDN);
        mpfr_exp(r9942, r9941, MPFR_RNDN);
        return mpfr_get_d(r9942, MPFR_RNDN);
}

static mpfr_t r9943, r9944, r9945, r9946, r9947, r9948, r9949, r9950, r9951, r9952, r9953, r9954, r9955, r9956, r9957;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1616);
        mpfr_init(r9943);
        mpfr_init(r9944);
        mpfr_init(r9945);
        mpfr_init_set_str(r9946, "2", 10, MPFR_RNDN);
        mpfr_init(r9947);
        mpfr_init(r9948);
        mpfr_init(r9949);
        mpfr_init(r9950);
        mpfr_init(r9951);
        mpfr_init(r9952);
        mpfr_init(r9953);
        mpfr_init(r9954);
        mpfr_init(r9955);
        mpfr_init(r9956);
        mpfr_init(r9957);
}

double f_dm(double __attribute__((unused)) K, double m, double n, double M, double l) {
        mpfr_set_d(r9943, m, MPFR_RNDN);
        mpfr_set_d(r9944, n, MPFR_RNDN);
        mpfr_add(r9945, r9943, r9944, MPFR_RNDN);
        ;
        mpfr_div(r9947, r9945, r9946, MPFR_RNDN);
        mpfr_set_d(r9948, M, MPFR_RNDN);
        mpfr_sub(r9949, r9947, r9948, MPFR_RNDN);
        mpfr_pow(r9950, r9949, r9946, MPFR_RNDN);
        mpfr_neg(r9951, r9950, MPFR_RNDN);
        mpfr_set_d(r9952, l, MPFR_RNDN);
        mpfr_sub(r9953, r9943, r9944, MPFR_RNDN);
        mpfr_abs(r9954, r9953, MPFR_RNDN);
        mpfr_sub(r9955, r9952, r9954, MPFR_RNDN);
        mpfr_sub(r9956, r9951, r9955, MPFR_RNDN);
        mpfr_exp(r9957, r9956, MPFR_RNDN);
        return mpfr_get_d(r9957, MPFR_RNDN);
}

