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

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

double f_if(float J, float l, float K, float U) {
        float r8712 = J;
        float r8713 = l;
        float r8714 = exp(r8713);
        float r8715 = -r8713;
        float r8716 = exp(r8715);
        float r8717 = r8714 - r8716;
        float r8718 = r8712 * r8717;
        float r8719 = K;
        float r8720 = 2.0f;
        float r8721 = r8719 / r8720;
        float r8722 = cos(r8721);
        float r8723 = r8718 * r8722;
        float r8724 = U;
        float r8725 = r8723 + r8724;
        return r8725;
}

double f_id(double J, double l, double K, double U) {
        double r8726 = J;
        double r8727 = l;
        double r8728 = exp(r8727);
        double r8729 = -r8727;
        double r8730 = exp(r8729);
        double r8731 = r8728 - r8730;
        double r8732 = r8726 * r8731;
        double r8733 = K;
        double r8734 = 2.0;
        double r8735 = r8733 / r8734;
        double r8736 = cos(r8735);
        double r8737 = r8732 * r8736;
        double r8738 = U;
        double r8739 = r8737 + r8738;
        return r8739;
}


double f_of(float J, float l, float K, float U) {
        float r8740 = U;
        float r8741 = J;
        float r8742 = l;
        float r8743 = 2.0f;
        float r8744 = r8742 * r8743;
        float r8745 = 0.016666666666666666f;
        float r8746 = 5.0f;
        float r8747 = pow(r8742, r8746);
        float r8748 = r8745 * r8747;
        float r8749 = 3.0f;
        float r8750 = pow(r8742, r8749);
        float r8751 = 0.3333333333333333f;
        float r8752 = r8750 * r8751;
        float r8753 = r8748 + r8752;
        float r8754 = r8744 + r8753;
        float r8755 = K;
        float r8756 = r8755 / r8743;
        float r8757 = cos(r8756);
        float r8758 = r8754 * r8757;
        float r8759 = r8741 * r8758;
        float r8760 = r8740 + r8759;
        return r8760;
}

double f_od(double J, double l, double K, double U) {
        double r8761 = U;
        double r8762 = J;
        double r8763 = l;
        double r8764 = 2.0;
        double r8765 = r8763 * r8764;
        double r8766 = 0.016666666666666666;
        double r8767 = 5.0;
        double r8768 = pow(r8763, r8767);
        double r8769 = r8766 * r8768;
        double r8770 = 3.0;
        double r8771 = pow(r8763, r8770);
        double r8772 = 0.3333333333333333;
        double r8773 = r8771 * r8772;
        double r8774 = r8769 + r8773;
        double r8775 = r8765 + r8774;
        double r8776 = K;
        double r8777 = r8776 / r8764;
        double r8778 = cos(r8777);
        double r8779 = r8775 * r8778;
        double r8780 = r8762 * r8779;
        double r8781 = r8761 + r8780;
        return r8781;
}

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 r8782, r8783, r8784, r8785, r8786, r8787, r8788, r8789, r8790, r8791, r8792, r8793, r8794, r8795;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8782);
        mpfr_init(r8783);
        mpfr_init(r8784);
        mpfr_init(r8785);
        mpfr_init(r8786);
        mpfr_init(r8787);
        mpfr_init(r8788);
        mpfr_init(r8789);
        mpfr_init_set_str(r8790, "2", 10, MPFR_RNDN);
        mpfr_init(r8791);
        mpfr_init(r8792);
        mpfr_init(r8793);
        mpfr_init(r8794);
        mpfr_init(r8795);
}

double f_im(double J, double l, double K, double U) {
        mpfr_set_d(r8782, J, MPFR_RNDN);
        mpfr_set_d(r8783, l, MPFR_RNDN);
        mpfr_exp(r8784, r8783, MPFR_RNDN);
        mpfr_neg(r8785, r8783, MPFR_RNDN);
        mpfr_exp(r8786, r8785, MPFR_RNDN);
        mpfr_sub(r8787, r8784, r8786, MPFR_RNDN);
        mpfr_mul(r8788, r8782, r8787, MPFR_RNDN);
        mpfr_set_d(r8789, K, MPFR_RNDN);
        ;
        mpfr_div(r8791, r8789, r8790, MPFR_RNDN);
        mpfr_cos(r8792, r8791, MPFR_RNDN);
        mpfr_mul(r8793, r8788, r8792, MPFR_RNDN);
        mpfr_set_d(r8794, U, MPFR_RNDN);
        mpfr_add(r8795, r8793, r8794, MPFR_RNDN);
        return mpfr_get_d(r8795, MPFR_RNDN);
}

static mpfr_t r8796, r8797, r8798, r8799, r8800, r8801, r8802, r8803, r8804, r8805, r8806, r8807, r8808, r8809, r8810, r8811, r8812, r8813, r8814, r8815, r8816;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8796);
        mpfr_init(r8797);
        mpfr_init(r8798);
        mpfr_init_set_str(r8799, "2", 10, MPFR_RNDN);
        mpfr_init(r8800);
        mpfr_init_set_str(r8801, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r8802, "5", 10, MPFR_RNDN);
        mpfr_init(r8803);
        mpfr_init(r8804);
        mpfr_init_set_str(r8805, "3", 10, MPFR_RNDN);
        mpfr_init(r8806);
        mpfr_init_set_str(r8807, "1/3", 10, MPFR_RNDN);
        mpfr_init(r8808);
        mpfr_init(r8809);
        mpfr_init(r8810);
        mpfr_init(r8811);
        mpfr_init(r8812);
        mpfr_init(r8813);
        mpfr_init(r8814);
        mpfr_init(r8815);
        mpfr_init(r8816);
}

double f_fm(double J, double l, double K, double U) {
        mpfr_set_d(r8796, U, MPFR_RNDN);
        mpfr_set_d(r8797, J, MPFR_RNDN);
        mpfr_set_d(r8798, l, MPFR_RNDN);
        ;
        mpfr_mul(r8800, r8798, r8799, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8803, r8798, r8802, MPFR_RNDN);
        mpfr_mul(r8804, r8801, r8803, MPFR_RNDN);
        ;
        mpfr_pow(r8806, r8798, r8805, MPFR_RNDN);
        ;
        mpfr_mul(r8808, r8806, r8807, MPFR_RNDN);
        mpfr_add(r8809, r8804, r8808, MPFR_RNDN);
        mpfr_add(r8810, r8800, r8809, MPFR_RNDN);
        mpfr_set_d(r8811, K, MPFR_RNDN);
        mpfr_div(r8812, r8811, r8799, MPFR_RNDN);
        mpfr_cos(r8813, r8812, MPFR_RNDN);
        mpfr_mul(r8814, r8810, r8813, MPFR_RNDN);
        mpfr_mul(r8815, r8797, r8814, MPFR_RNDN);
        mpfr_add(r8816, r8796, r8815, MPFR_RNDN);
        return mpfr_get_d(r8816, MPFR_RNDN);
}

static mpfr_t r8817, r8818, r8819, r8820, r8821, r8822, r8823, r8824, r8825, r8826, r8827, r8828, r8829, r8830, r8831, r8832, r8833, r8834, r8835, r8836, r8837;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8817);
        mpfr_init(r8818);
        mpfr_init(r8819);
        mpfr_init_set_str(r8820, "2", 10, MPFR_RNDN);
        mpfr_init(r8821);
        mpfr_init_set_str(r8822, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r8823, "5", 10, MPFR_RNDN);
        mpfr_init(r8824);
        mpfr_init(r8825);
        mpfr_init_set_str(r8826, "3", 10, MPFR_RNDN);
        mpfr_init(r8827);
        mpfr_init_set_str(r8828, "1/3", 10, MPFR_RNDN);
        mpfr_init(r8829);
        mpfr_init(r8830);
        mpfr_init(r8831);
        mpfr_init(r8832);
        mpfr_init(r8833);
        mpfr_init(r8834);
        mpfr_init(r8835);
        mpfr_init(r8836);
        mpfr_init(r8837);
}

double f_dm(double J, double l, double K, double U) {
        mpfr_set_d(r8817, U, MPFR_RNDN);
        mpfr_set_d(r8818, J, MPFR_RNDN);
        mpfr_set_d(r8819, l, MPFR_RNDN);
        ;
        mpfr_mul(r8821, r8819, r8820, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8824, r8819, r8823, MPFR_RNDN);
        mpfr_mul(r8825, r8822, r8824, MPFR_RNDN);
        ;
        mpfr_pow(r8827, r8819, r8826, MPFR_RNDN);
        ;
        mpfr_mul(r8829, r8827, r8828, MPFR_RNDN);
        mpfr_add(r8830, r8825, r8829, MPFR_RNDN);
        mpfr_add(r8831, r8821, r8830, MPFR_RNDN);
        mpfr_set_d(r8832, K, MPFR_RNDN);
        mpfr_div(r8833, r8832, r8820, MPFR_RNDN);
        mpfr_cos(r8834, r8833, MPFR_RNDN);
        mpfr_mul(r8835, r8831, r8834, MPFR_RNDN);
        mpfr_mul(r8836, r8818, r8835, MPFR_RNDN);
        mpfr_add(r8837, r8817, r8836, MPFR_RNDN);
        return mpfr_get_d(r8837, MPFR_RNDN);
}

