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

char *name = "2sin (example 3.3)";

double f_if(float x, float eps) {
        float r58773 = x;
        float r58774 = eps;
        float r58775 = r58773 + r58774;
        float r58776 = sin(r58775);
        float r58777 = sin(r58773);
        float r58778 = r58776 - r58777;
        return r58778;
}

double f_id(double x, double eps) {
        double r58779 = x;
        double r58780 = eps;
        double r58781 = r58779 + r58780;
        double r58782 = sin(r58781);
        double r58783 = sin(r58779);
        double r58784 = r58782 - r58783;
        return r58784;
}


double f_of(float x, float eps) {
        float r58785 = eps;
        float r58786 = -4.937900603750566e-17;
        bool r58787 = r58785 <= r58786;
        float r58788 = x;
        float r58789 = sin(r58788);
        float r58790 = cos(r58785);
        float r58791 = r58789 * r58790;
        float r58792 = cos(r58788);
        float r58793 = sin(r58785);
        float r58794 = r58792 * r58793;
        float r58795 = r58794 - r58789;
        float r58796 = r58791 + r58795;
        float r58797 = 4.088262929564001e-08;
        bool r58798 = r58785 <= r58797;
        float r58799 = 2;
        float r58800 = r58785 / r58799;
        float r58801 = sin(r58800);
        float r58802 = r58788 + r58788;
        float r58803 = r58785 + r58802;
        float r58804 = r58803 / r58799;
        float r58805 = cos(r58804);
        float r58806 = r58801 * r58805;
        float r58807 = r58799 * r58806;
        float r58808 = r58798 ? r58807 : r58796;
        float r58809 = r58787 ? r58796 : r58808;
        return r58809;
}

double f_od(double x, double eps) {
        double r58810 = eps;
        double r58811 = -4.937900603750566e-17;
        bool r58812 = r58810 <= r58811;
        double r58813 = x;
        double r58814 = sin(r58813);
        double r58815 = cos(r58810);
        double r58816 = r58814 * r58815;
        double r58817 = cos(r58813);
        double r58818 = sin(r58810);
        double r58819 = r58817 * r58818;
        double r58820 = r58819 - r58814;
        double r58821 = r58816 + r58820;
        double r58822 = 4.088262929564001e-08;
        bool r58823 = r58810 <= r58822;
        double r58824 = 2;
        double r58825 = r58810 / r58824;
        double r58826 = sin(r58825);
        double r58827 = r58813 + r58813;
        double r58828 = r58810 + r58827;
        double r58829 = r58828 / r58824;
        double r58830 = cos(r58829);
        double r58831 = r58826 * r58830;
        double r58832 = r58824 * r58831;
        double r58833 = r58823 ? r58832 : r58821;
        double r58834 = r58812 ? r58821 : r58833;
        return r58834;
}

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 r58835, r58836, r58837, r58838, r58839, r58840;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58835);
        mpfr_init(r58836);
        mpfr_init(r58837);
        mpfr_init(r58838);
        mpfr_init(r58839);
        mpfr_init(r58840);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58835, x, MPFR_RNDN);
        mpfr_set_d(r58836, eps, MPFR_RNDN);
        mpfr_add(r58837, r58835, r58836, MPFR_RNDN);
        mpfr_sin(r58838, r58837, MPFR_RNDN);
        mpfr_sin(r58839, r58835, MPFR_RNDN);
        mpfr_sub(r58840, r58838, r58839, MPFR_RNDN);
        return mpfr_get_d(r58840, MPFR_RNDN);
}

static mpfr_t r58841, r58842, r58843, r58844, r58845, r58846, r58847, r58848, r58849, r58850, r58851, r58852, r58853, r58854, r58855, r58856, r58857, r58858, r58859, r58860, r58861, r58862, r58863, r58864, r58865;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58841);
        mpfr_init_set_str(r58842, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r58843);
        mpfr_init(r58844);
        mpfr_init(r58845);
        mpfr_init(r58846);
        mpfr_init(r58847);
        mpfr_init(r58848);
        mpfr_init(r58849);
        mpfr_init(r58850);
        mpfr_init(r58851);
        mpfr_init(r58852);
        mpfr_init_set_str(r58853, "4.088262929564001e-08", 10, MPFR_RNDN);
        mpfr_init(r58854);
        mpfr_init_set_str(r58855, "2", 10, MPFR_RNDN);
        mpfr_init(r58856);
        mpfr_init(r58857);
        mpfr_init(r58858);
        mpfr_init(r58859);
        mpfr_init(r58860);
        mpfr_init(r58861);
        mpfr_init(r58862);
        mpfr_init(r58863);
        mpfr_init(r58864);
        mpfr_init(r58865);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58841, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58843, mpfr_cmp(r58841, r58842) <= 0, MPFR_RNDN);
        mpfr_set_d(r58844, x, MPFR_RNDN);
        mpfr_sin(r58845, r58844, MPFR_RNDN);
        mpfr_cos(r58846, r58841, MPFR_RNDN);
        mpfr_mul(r58847, r58845, r58846, MPFR_RNDN);
        mpfr_cos(r58848, r58844, MPFR_RNDN);
        mpfr_sin(r58849, r58841, MPFR_RNDN);
        mpfr_mul(r58850, r58848, r58849, MPFR_RNDN);
        mpfr_sub(r58851, r58850, r58845, MPFR_RNDN);
        mpfr_add(r58852, r58847, r58851, MPFR_RNDN);
        ;
        mpfr_set_si(r58854, mpfr_cmp(r58841, r58853) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58856, r58841, r58855, MPFR_RNDN);
        mpfr_sin(r58857, r58856, MPFR_RNDN);
        mpfr_add(r58858, r58844, r58844, MPFR_RNDN);
        mpfr_add(r58859, r58841, r58858, MPFR_RNDN);
        mpfr_div(r58860, r58859, r58855, MPFR_RNDN);
        mpfr_cos(r58861, r58860, MPFR_RNDN);
        mpfr_mul(r58862, r58857, r58861, MPFR_RNDN);
        mpfr_mul(r58863, r58855, r58862, MPFR_RNDN);
        if (mpfr_get_si(r58854, MPFR_RNDN)) { mpfr_set(r58864, r58863, MPFR_RNDN); } else { mpfr_set(r58864, r58852, MPFR_RNDN); };
        if (mpfr_get_si(r58843, MPFR_RNDN)) { mpfr_set(r58865, r58852, MPFR_RNDN); } else { mpfr_set(r58865, r58864, MPFR_RNDN); };
        return mpfr_get_d(r58865, MPFR_RNDN);
}

static mpfr_t r58866, r58867, r58868, r58869, r58870, r58871, r58872, r58873, r58874, r58875, r58876, r58877, r58878, r58879, r58880, r58881, r58882, r58883, r58884, r58885, r58886, r58887, r58888, r58889, r58890;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58866);
        mpfr_init_set_str(r58867, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r58868);
        mpfr_init(r58869);
        mpfr_init(r58870);
        mpfr_init(r58871);
        mpfr_init(r58872);
        mpfr_init(r58873);
        mpfr_init(r58874);
        mpfr_init(r58875);
        mpfr_init(r58876);
        mpfr_init(r58877);
        mpfr_init_set_str(r58878, "4.088262929564001e-08", 10, MPFR_RNDN);
        mpfr_init(r58879);
        mpfr_init_set_str(r58880, "2", 10, MPFR_RNDN);
        mpfr_init(r58881);
        mpfr_init(r58882);
        mpfr_init(r58883);
        mpfr_init(r58884);
        mpfr_init(r58885);
        mpfr_init(r58886);
        mpfr_init(r58887);
        mpfr_init(r58888);
        mpfr_init(r58889);
        mpfr_init(r58890);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58866, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58868, mpfr_cmp(r58866, r58867) <= 0, MPFR_RNDN);
        mpfr_set_d(r58869, x, MPFR_RNDN);
        mpfr_sin(r58870, r58869, MPFR_RNDN);
        mpfr_cos(r58871, r58866, MPFR_RNDN);
        mpfr_mul(r58872, r58870, r58871, MPFR_RNDN);
        mpfr_cos(r58873, r58869, MPFR_RNDN);
        mpfr_sin(r58874, r58866, MPFR_RNDN);
        mpfr_mul(r58875, r58873, r58874, MPFR_RNDN);
        mpfr_sub(r58876, r58875, r58870, MPFR_RNDN);
        mpfr_add(r58877, r58872, r58876, MPFR_RNDN);
        ;
        mpfr_set_si(r58879, mpfr_cmp(r58866, r58878) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58881, r58866, r58880, MPFR_RNDN);
        mpfr_sin(r58882, r58881, MPFR_RNDN);
        mpfr_add(r58883, r58869, r58869, MPFR_RNDN);
        mpfr_add(r58884, r58866, r58883, MPFR_RNDN);
        mpfr_div(r58885, r58884, r58880, MPFR_RNDN);
        mpfr_cos(r58886, r58885, MPFR_RNDN);
        mpfr_mul(r58887, r58882, r58886, MPFR_RNDN);
        mpfr_mul(r58888, r58880, r58887, MPFR_RNDN);
        if (mpfr_get_si(r58879, MPFR_RNDN)) { mpfr_set(r58889, r58888, MPFR_RNDN); } else { mpfr_set(r58889, r58877, MPFR_RNDN); };
        if (mpfr_get_si(r58868, MPFR_RNDN)) { mpfr_set(r58890, r58877, MPFR_RNDN); } else { mpfr_set(r58890, r58889, MPFR_RNDN); };
        return mpfr_get_d(r58890, MPFR_RNDN);
}

