#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 r58459 = x;
        float r58460 = eps;
        float r58461 = r58459 + r58460;
        float r58462 = sin(r58461);
        float r58463 = sin(r58459);
        float r58464 = r58462 - r58463;
        return r58464;
}

double f_id(double x, double eps) {
        double r58465 = x;
        double r58466 = eps;
        double r58467 = r58465 + r58466;
        double r58468 = sin(r58467);
        double r58469 = sin(r58465);
        double r58470 = r58468 - r58469;
        return r58470;
}


double f_of(float x, float eps) {
        float r58471 = eps;
        float r58472 = -1.2150886558136826e-11f;
        bool r58473 = r58471 <= r58472;
        float r58474 = x;
        float r58475 = sin(r58474);
        float r58476 = cos(r58471);
        float r58477 = r58475 * r58476;
        float r58478 = cos(r58474);
        float r58479 = sin(r58471);
        float r58480 = r58478 * r58479;
        float r58481 = r58477 + r58480;
        float r58482 = r58481 - r58475;
        float r58483 = 1.1236023678861994e-11f;
        bool r58484 = r58471 <= r58483;
        float r58485 = 2.0f;
        float r58486 = r58471 / r58485;
        float r58487 = sin(r58486);
        float r58488 = r58474 + r58471;
        float r58489 = r58488 + r58474;
        float r58490 = r58489 / r58485;
        float r58491 = cos(r58490);
        float r58492 = r58487 * r58491;
        float r58493 = r58485 * r58492;
        float r58494 = r58484 ? r58493 : r58482;
        float r58495 = r58473 ? r58482 : r58494;
        return r58495;
}

double f_od(double x, double eps) {
        double r58496 = eps;
        double r58497 = -1.2150886558136826e-11;
        bool r58498 = r58496 <= r58497;
        double r58499 = x;
        double r58500 = sin(r58499);
        double r58501 = cos(r58496);
        double r58502 = r58500 * r58501;
        double r58503 = cos(r58499);
        double r58504 = sin(r58496);
        double r58505 = r58503 * r58504;
        double r58506 = r58502 + r58505;
        double r58507 = r58506 - r58500;
        double r58508 = 1.1236023678861994e-11;
        bool r58509 = r58496 <= r58508;
        double r58510 = 2.0;
        double r58511 = r58496 / r58510;
        double r58512 = sin(r58511);
        double r58513 = r58499 + r58496;
        double r58514 = r58513 + r58499;
        double r58515 = r58514 / r58510;
        double r58516 = cos(r58515);
        double r58517 = r58512 * r58516;
        double r58518 = r58510 * r58517;
        double r58519 = r58509 ? r58518 : r58507;
        double r58520 = r58498 ? r58507 : r58519;
        return r58520;
}

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 r58521, r58522, r58523, r58524, r58525, r58526;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r58521);
        mpfr_init(r58522);
        mpfr_init(r58523);
        mpfr_init(r58524);
        mpfr_init(r58525);
        mpfr_init(r58526);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58521, x, MPFR_RNDN);
        mpfr_set_d(r58522, eps, MPFR_RNDN);
        mpfr_add(r58523, r58521, r58522, MPFR_RNDN);
        mpfr_sin(r58524, r58523, MPFR_RNDN);
        mpfr_sin(r58525, r58521, MPFR_RNDN);
        mpfr_sub(r58526, r58524, r58525, MPFR_RNDN);
        return mpfr_get_d(r58526, MPFR_RNDN);
}

static mpfr_t r58527, r58528, r58529, r58530, r58531, r58532, r58533, r58534, r58535, r58536, r58537, r58538, r58539, r58540, r58541, r58542, r58543, r58544, r58545, r58546, r58547, r58548, r58549, r58550, r58551;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r58527);
        mpfr_init_set_str(r58528, "-1.2150886558136826e-11", 10, MPFR_RNDN);
        mpfr_init(r58529);
        mpfr_init(r58530);
        mpfr_init(r58531);
        mpfr_init(r58532);
        mpfr_init(r58533);
        mpfr_init(r58534);
        mpfr_init(r58535);
        mpfr_init(r58536);
        mpfr_init(r58537);
        mpfr_init(r58538);
        mpfr_init_set_str(r58539, "1.1236023678861994e-11", 10, MPFR_RNDN);
        mpfr_init(r58540);
        mpfr_init_set_str(r58541, "2", 10, MPFR_RNDN);
        mpfr_init(r58542);
        mpfr_init(r58543);
        mpfr_init(r58544);
        mpfr_init(r58545);
        mpfr_init(r58546);
        mpfr_init(r58547);
        mpfr_init(r58548);
        mpfr_init(r58549);
        mpfr_init(r58550);
        mpfr_init(r58551);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58527, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58529, mpfr_cmp(r58527, r58528) <= 0, MPFR_RNDN);
        mpfr_set_d(r58530, x, MPFR_RNDN);
        mpfr_sin(r58531, r58530, MPFR_RNDN);
        mpfr_cos(r58532, r58527, MPFR_RNDN);
        mpfr_mul(r58533, r58531, r58532, MPFR_RNDN);
        mpfr_cos(r58534, r58530, MPFR_RNDN);
        mpfr_sin(r58535, r58527, MPFR_RNDN);
        mpfr_mul(r58536, r58534, r58535, MPFR_RNDN);
        mpfr_add(r58537, r58533, r58536, MPFR_RNDN);
        mpfr_sub(r58538, r58537, r58531, MPFR_RNDN);
        ;
        mpfr_set_si(r58540, mpfr_cmp(r58527, r58539) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58542, r58527, r58541, MPFR_RNDN);
        mpfr_sin(r58543, r58542, MPFR_RNDN);
        mpfr_add(r58544, r58530, r58527, MPFR_RNDN);
        mpfr_add(r58545, r58544, r58530, MPFR_RNDN);
        mpfr_div(r58546, r58545, r58541, MPFR_RNDN);
        mpfr_cos(r58547, r58546, MPFR_RNDN);
        mpfr_mul(r58548, r58543, r58547, MPFR_RNDN);
        mpfr_mul(r58549, r58541, r58548, MPFR_RNDN);
        if (mpfr_get_si(r58540, MPFR_RNDN)) { mpfr_set(r58550, r58549, MPFR_RNDN); } else { mpfr_set(r58550, r58538, MPFR_RNDN); };
        if (mpfr_get_si(r58529, MPFR_RNDN)) { mpfr_set(r58551, r58538, MPFR_RNDN); } else { mpfr_set(r58551, r58550, MPFR_RNDN); };
        return mpfr_get_d(r58551, MPFR_RNDN);
}

static mpfr_t r58552, r58553, r58554, r58555, r58556, r58557, r58558, r58559, r58560, r58561, r58562, r58563, r58564, r58565, r58566, r58567, r58568, r58569, r58570, r58571, r58572, r58573, r58574, r58575, r58576;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r58552);
        mpfr_init_set_str(r58553, "-1.2150886558136826e-11", 10, MPFR_RNDN);
        mpfr_init(r58554);
        mpfr_init(r58555);
        mpfr_init(r58556);
        mpfr_init(r58557);
        mpfr_init(r58558);
        mpfr_init(r58559);
        mpfr_init(r58560);
        mpfr_init(r58561);
        mpfr_init(r58562);
        mpfr_init(r58563);
        mpfr_init_set_str(r58564, "1.1236023678861994e-11", 10, MPFR_RNDN);
        mpfr_init(r58565);
        mpfr_init_set_str(r58566, "2", 10, MPFR_RNDN);
        mpfr_init(r58567);
        mpfr_init(r58568);
        mpfr_init(r58569);
        mpfr_init(r58570);
        mpfr_init(r58571);
        mpfr_init(r58572);
        mpfr_init(r58573);
        mpfr_init(r58574);
        mpfr_init(r58575);
        mpfr_init(r58576);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58552, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58554, mpfr_cmp(r58552, r58553) <= 0, MPFR_RNDN);
        mpfr_set_d(r58555, x, MPFR_RNDN);
        mpfr_sin(r58556, r58555, MPFR_RNDN);
        mpfr_cos(r58557, r58552, MPFR_RNDN);
        mpfr_mul(r58558, r58556, r58557, MPFR_RNDN);
        mpfr_cos(r58559, r58555, MPFR_RNDN);
        mpfr_sin(r58560, r58552, MPFR_RNDN);
        mpfr_mul(r58561, r58559, r58560, MPFR_RNDN);
        mpfr_add(r58562, r58558, r58561, MPFR_RNDN);
        mpfr_sub(r58563, r58562, r58556, MPFR_RNDN);
        ;
        mpfr_set_si(r58565, mpfr_cmp(r58552, r58564) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58567, r58552, r58566, MPFR_RNDN);
        mpfr_sin(r58568, r58567, MPFR_RNDN);
        mpfr_add(r58569, r58555, r58552, MPFR_RNDN);
        mpfr_add(r58570, r58569, r58555, MPFR_RNDN);
        mpfr_div(r58571, r58570, r58566, MPFR_RNDN);
        mpfr_cos(r58572, r58571, MPFR_RNDN);
        mpfr_mul(r58573, r58568, r58572, MPFR_RNDN);
        mpfr_mul(r58574, r58566, r58573, MPFR_RNDN);
        if (mpfr_get_si(r58565, MPFR_RNDN)) { mpfr_set(r58575, r58574, MPFR_RNDN); } else { mpfr_set(r58575, r58563, MPFR_RNDN); };
        if (mpfr_get_si(r58554, MPFR_RNDN)) { mpfr_set(r58576, r58563, MPFR_RNDN); } else { mpfr_set(r58576, r58575, MPFR_RNDN); };
        return mpfr_get_d(r58576, MPFR_RNDN);
}

