#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 r57636 = x;
        float r57637 = eps;
        float r57638 = r57636 + r57637;
        float r57639 = sin(r57638);
        float r57640 = sin(r57636);
        float r57641 = r57639 - r57640;
        return r57641;
}

double f_id(double x, double eps) {
        double r57642 = x;
        double r57643 = eps;
        double r57644 = r57642 + r57643;
        double r57645 = sin(r57644);
        double r57646 = sin(r57642);
        double r57647 = r57645 - r57646;
        return r57647;
}


double f_of(float x, float eps) {
        float r57648 = eps;
        float r57649 = -9.473127049996519e-09;
        bool r57650 = r57648 <= r57649;
        float r57651 = x;
        float r57652 = sin(r57651);
        float r57653 = cos(r57648);
        float r57654 = r57652 * r57653;
        float r57655 = cos(r57651);
        float r57656 = sin(r57648);
        float r57657 = r57655 * r57656;
        float r57658 = r57657 - r57652;
        float r57659 = r57654 + r57658;
        float r57660 = 1.3414614579139239e-08;
        bool r57661 = r57648 <= r57660;
        float r57662 = 2;
        float r57663 = r57648 / r57662;
        float r57664 = sin(r57663);
        float r57665 = r57651 + r57651;
        float r57666 = r57648 + r57665;
        float r57667 = r57666 / r57662;
        float r57668 = cos(r57667);
        float r57669 = r57664 * r57668;
        float r57670 = r57662 * r57669;
        float r57671 = r57661 ? r57670 : r57659;
        float r57672 = r57650 ? r57659 : r57671;
        return r57672;
}

double f_od(double x, double eps) {
        double r57673 = eps;
        double r57674 = -9.473127049996519e-09;
        bool r57675 = r57673 <= r57674;
        double r57676 = x;
        double r57677 = sin(r57676);
        double r57678 = cos(r57673);
        double r57679 = r57677 * r57678;
        double r57680 = cos(r57676);
        double r57681 = sin(r57673);
        double r57682 = r57680 * r57681;
        double r57683 = r57682 - r57677;
        double r57684 = r57679 + r57683;
        double r57685 = 1.3414614579139239e-08;
        bool r57686 = r57673 <= r57685;
        double r57687 = 2;
        double r57688 = r57673 / r57687;
        double r57689 = sin(r57688);
        double r57690 = r57676 + r57676;
        double r57691 = r57673 + r57690;
        double r57692 = r57691 / r57687;
        double r57693 = cos(r57692);
        double r57694 = r57689 * r57693;
        double r57695 = r57687 * r57694;
        double r57696 = r57686 ? r57695 : r57684;
        double r57697 = r57675 ? r57684 : r57696;
        return r57697;
}

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 r57698, r57699, r57700, r57701, r57702, r57703;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r57698);
        mpfr_init(r57699);
        mpfr_init(r57700);
        mpfr_init(r57701);
        mpfr_init(r57702);
        mpfr_init(r57703);
}

double f_im(double x, double eps) {
        mpfr_set_d(r57698, x, MPFR_RNDN);
        mpfr_set_d(r57699, eps, MPFR_RNDN);
        mpfr_add(r57700, r57698, r57699, MPFR_RNDN);
        mpfr_sin(r57701, r57700, MPFR_RNDN);
        mpfr_sin(r57702, r57698, MPFR_RNDN);
        mpfr_sub(r57703, r57701, r57702, MPFR_RNDN);
        return mpfr_get_d(r57703, MPFR_RNDN);
}

static mpfr_t r57704, r57705, r57706, r57707, r57708, r57709, r57710, r57711, r57712, r57713, r57714, r57715, r57716, r57717, r57718, r57719, r57720, r57721, r57722, r57723, r57724, r57725, r57726, r57727, r57728;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r57704);
        mpfr_init_set_str(r57705, "-9.473127049996519e-09", 10, MPFR_RNDN);
        mpfr_init(r57706);
        mpfr_init(r57707);
        mpfr_init(r57708);
        mpfr_init(r57709);
        mpfr_init(r57710);
        mpfr_init(r57711);
        mpfr_init(r57712);
        mpfr_init(r57713);
        mpfr_init(r57714);
        mpfr_init(r57715);
        mpfr_init_set_str(r57716, "1.3414614579139239e-08", 10, MPFR_RNDN);
        mpfr_init(r57717);
        mpfr_init_set_str(r57718, "2", 10, MPFR_RNDN);
        mpfr_init(r57719);
        mpfr_init(r57720);
        mpfr_init(r57721);
        mpfr_init(r57722);
        mpfr_init(r57723);
        mpfr_init(r57724);
        mpfr_init(r57725);
        mpfr_init(r57726);
        mpfr_init(r57727);
        mpfr_init(r57728);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r57704, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r57706, mpfr_cmp(r57704, r57705) <= 0, MPFR_RNDN);
        mpfr_set_d(r57707, x, MPFR_RNDN);
        mpfr_sin(r57708, r57707, MPFR_RNDN);
        mpfr_cos(r57709, r57704, MPFR_RNDN);
        mpfr_mul(r57710, r57708, r57709, MPFR_RNDN);
        mpfr_cos(r57711, r57707, MPFR_RNDN);
        mpfr_sin(r57712, r57704, MPFR_RNDN);
        mpfr_mul(r57713, r57711, r57712, MPFR_RNDN);
        mpfr_sub(r57714, r57713, r57708, MPFR_RNDN);
        mpfr_add(r57715, r57710, r57714, MPFR_RNDN);
        ;
        mpfr_set_si(r57717, mpfr_cmp(r57704, r57716) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r57719, r57704, r57718, MPFR_RNDN);
        mpfr_sin(r57720, r57719, MPFR_RNDN);
        mpfr_add(r57721, r57707, r57707, MPFR_RNDN);
        mpfr_add(r57722, r57704, r57721, MPFR_RNDN);
        mpfr_div(r57723, r57722, r57718, MPFR_RNDN);
        mpfr_cos(r57724, r57723, MPFR_RNDN);
        mpfr_mul(r57725, r57720, r57724, MPFR_RNDN);
        mpfr_mul(r57726, r57718, r57725, MPFR_RNDN);
        if (mpfr_get_si(r57717, MPFR_RNDN)) { mpfr_set(r57727, r57726, MPFR_RNDN); } else { mpfr_set(r57727, r57715, MPFR_RNDN); };
        if (mpfr_get_si(r57706, MPFR_RNDN)) { mpfr_set(r57728, r57715, MPFR_RNDN); } else { mpfr_set(r57728, r57727, MPFR_RNDN); };
        return mpfr_get_d(r57728, MPFR_RNDN);
}

static mpfr_t r57729, r57730, r57731, r57732, r57733, r57734, r57735, r57736, r57737, r57738, r57739, r57740, r57741, r57742, r57743, r57744, r57745, r57746, r57747, r57748, r57749, r57750, r57751, r57752, r57753;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r57729);
        mpfr_init_set_str(r57730, "-9.473127049996519e-09", 10, MPFR_RNDN);
        mpfr_init(r57731);
        mpfr_init(r57732);
        mpfr_init(r57733);
        mpfr_init(r57734);
        mpfr_init(r57735);
        mpfr_init(r57736);
        mpfr_init(r57737);
        mpfr_init(r57738);
        mpfr_init(r57739);
        mpfr_init(r57740);
        mpfr_init_set_str(r57741, "1.3414614579139239e-08", 10, MPFR_RNDN);
        mpfr_init(r57742);
        mpfr_init_set_str(r57743, "2", 10, MPFR_RNDN);
        mpfr_init(r57744);
        mpfr_init(r57745);
        mpfr_init(r57746);
        mpfr_init(r57747);
        mpfr_init(r57748);
        mpfr_init(r57749);
        mpfr_init(r57750);
        mpfr_init(r57751);
        mpfr_init(r57752);
        mpfr_init(r57753);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r57729, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r57731, mpfr_cmp(r57729, r57730) <= 0, MPFR_RNDN);
        mpfr_set_d(r57732, x, MPFR_RNDN);
        mpfr_sin(r57733, r57732, MPFR_RNDN);
        mpfr_cos(r57734, r57729, MPFR_RNDN);
        mpfr_mul(r57735, r57733, r57734, MPFR_RNDN);
        mpfr_cos(r57736, r57732, MPFR_RNDN);
        mpfr_sin(r57737, r57729, MPFR_RNDN);
        mpfr_mul(r57738, r57736, r57737, MPFR_RNDN);
        mpfr_sub(r57739, r57738, r57733, MPFR_RNDN);
        mpfr_add(r57740, r57735, r57739, MPFR_RNDN);
        ;
        mpfr_set_si(r57742, mpfr_cmp(r57729, r57741) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r57744, r57729, r57743, MPFR_RNDN);
        mpfr_sin(r57745, r57744, MPFR_RNDN);
        mpfr_add(r57746, r57732, r57732, MPFR_RNDN);
        mpfr_add(r57747, r57729, r57746, MPFR_RNDN);
        mpfr_div(r57748, r57747, r57743, MPFR_RNDN);
        mpfr_cos(r57749, r57748, MPFR_RNDN);
        mpfr_mul(r57750, r57745, r57749, MPFR_RNDN);
        mpfr_mul(r57751, r57743, r57750, MPFR_RNDN);
        if (mpfr_get_si(r57742, MPFR_RNDN)) { mpfr_set(r57752, r57751, MPFR_RNDN); } else { mpfr_set(r57752, r57740, MPFR_RNDN); };
        if (mpfr_get_si(r57731, MPFR_RNDN)) { mpfr_set(r57753, r57740, MPFR_RNDN); } else { mpfr_set(r57753, r57752, MPFR_RNDN); };
        return mpfr_get_d(r57753, MPFR_RNDN);
}

