#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 r11872508 = x;
        float r11872509 = eps;
        float r11872510 = r11872508 + r11872509;
        float r11872511 = sin(r11872510);
        float r11872512 = sin(r11872508);
        float r11872513 = r11872511 - r11872512;
        return r11872513;
}

double f_id(double x, double eps) {
        double r11872514 = x;
        double r11872515 = eps;
        double r11872516 = r11872514 + r11872515;
        double r11872517 = sin(r11872516);
        double r11872518 = sin(r11872514);
        double r11872519 = r11872517 - r11872518;
        return r11872519;
}


double f_of(float x, float eps) {
        float r11872520 = eps;
        float r11872521 = 2;
        float r11872522 = r11872520 / r11872521;
        float r11872523 = sin(r11872522);
        float r11872524 = x;
        float r11872525 = r11872524 + r11872524;
        float r11872526 = r11872520 + r11872525;
        float r11872527 = r11872526 / r11872521;
        float r11872528 = cos(r11872527);
        float r11872529 = r11872523 * r11872528;
        float r11872530 = -3.176887565653019e-10;
        bool r11872531 = r11872529 <= r11872530;
        float r11872532 = sin(r11872524);
        float r11872533 = cos(r11872520);
        float r11872534 = r11872532 * r11872533;
        float r11872535 = cos(r11872524);
        float r11872536 = sin(r11872520);
        float r11872537 = r11872535 * r11872536;
        float r11872538 = r11872534 + r11872537;
        float r11872539 = r11872538 - r11872532;
        float r11872540 = 8.161626676704951e-19;
        bool r11872541 = r11872529 <= r11872540;
        float r11872542 = r11872521 * r11872529;
        float r11872543 = r11872537 - r11872532;
        float r11872544 = r11872534 + r11872543;
        float r11872545 = r11872541 ? r11872542 : r11872544;
        float r11872546 = r11872531 ? r11872539 : r11872545;
        return r11872546;
}

double f_od(double x, double eps) {
        double r11872547 = eps;
        double r11872548 = 2;
        double r11872549 = r11872547 / r11872548;
        double r11872550 = sin(r11872549);
        double r11872551 = x;
        double r11872552 = r11872551 + r11872551;
        double r11872553 = r11872547 + r11872552;
        double r11872554 = r11872553 / r11872548;
        double r11872555 = cos(r11872554);
        double r11872556 = r11872550 * r11872555;
        double r11872557 = -3.176887565653019e-10;
        bool r11872558 = r11872556 <= r11872557;
        double r11872559 = sin(r11872551);
        double r11872560 = cos(r11872547);
        double r11872561 = r11872559 * r11872560;
        double r11872562 = cos(r11872551);
        double r11872563 = sin(r11872547);
        double r11872564 = r11872562 * r11872563;
        double r11872565 = r11872561 + r11872564;
        double r11872566 = r11872565 - r11872559;
        double r11872567 = 8.161626676704951e-19;
        bool r11872568 = r11872556 <= r11872567;
        double r11872569 = r11872548 * r11872556;
        double r11872570 = r11872564 - r11872559;
        double r11872571 = r11872561 + r11872570;
        double r11872572 = r11872568 ? r11872569 : r11872571;
        double r11872573 = r11872558 ? r11872566 : r11872572;
        return r11872573;
}

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 r11872574, r11872575, r11872576, r11872577, r11872578, r11872579;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11872574);
        mpfr_init(r11872575);
        mpfr_init(r11872576);
        mpfr_init(r11872577);
        mpfr_init(r11872578);
        mpfr_init(r11872579);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11872574, x, MPFR_RNDN);
        mpfr_set_d(r11872575, eps, MPFR_RNDN);
        mpfr_add(r11872576, r11872574, r11872575, MPFR_RNDN);
        mpfr_sin(r11872577, r11872576, MPFR_RNDN);
        mpfr_sin(r11872578, r11872574, MPFR_RNDN);
        mpfr_sub(r11872579, r11872577, r11872578, MPFR_RNDN);
        return mpfr_get_d(r11872579, MPFR_RNDN);
}

static mpfr_t r11872580, r11872581, r11872582, r11872583, r11872584, r11872585, r11872586, r11872587, r11872588, r11872589, r11872590, r11872591, r11872592, r11872593, r11872594, r11872595, r11872596, r11872597, r11872598, r11872599, r11872600, r11872601, r11872602, r11872603, r11872604, r11872605, r11872606;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11872580);
        mpfr_init_set_str(r11872581, "2", 10, MPFR_RNDN);
        mpfr_init(r11872582);
        mpfr_init(r11872583);
        mpfr_init(r11872584);
        mpfr_init(r11872585);
        mpfr_init(r11872586);
        mpfr_init(r11872587);
        mpfr_init(r11872588);
        mpfr_init(r11872589);
        mpfr_init_set_str(r11872590, "-3.176887565653019e-10", 10, MPFR_RNDN);
        mpfr_init(r11872591);
        mpfr_init(r11872592);
        mpfr_init(r11872593);
        mpfr_init(r11872594);
        mpfr_init(r11872595);
        mpfr_init(r11872596);
        mpfr_init(r11872597);
        mpfr_init(r11872598);
        mpfr_init(r11872599);
        mpfr_init_set_str(r11872600, "8.161626676704951e-19", 10, MPFR_RNDN);
        mpfr_init(r11872601);
        mpfr_init(r11872602);
        mpfr_init(r11872603);
        mpfr_init(r11872604);
        mpfr_init(r11872605);
        mpfr_init(r11872606);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r11872580, eps, MPFR_RNDN);
        ;
        mpfr_div(r11872582, r11872580, r11872581, MPFR_RNDN);
        mpfr_sin(r11872583, r11872582, MPFR_RNDN);
        mpfr_set_d(r11872584, x, MPFR_RNDN);
        mpfr_add(r11872585, r11872584, r11872584, MPFR_RNDN);
        mpfr_add(r11872586, r11872580, r11872585, MPFR_RNDN);
        mpfr_div(r11872587, r11872586, r11872581, MPFR_RNDN);
        mpfr_cos(r11872588, r11872587, MPFR_RNDN);
        mpfr_mul(r11872589, r11872583, r11872588, MPFR_RNDN);
        ;
        mpfr_set_si(r11872591, mpfr_cmp(r11872589, r11872590) <= 0, MPFR_RNDN);
        mpfr_sin(r11872592, r11872584, MPFR_RNDN);
        mpfr_cos(r11872593, r11872580, MPFR_RNDN);
        mpfr_mul(r11872594, r11872592, r11872593, MPFR_RNDN);
        mpfr_cos(r11872595, r11872584, MPFR_RNDN);
        mpfr_sin(r11872596, r11872580, MPFR_RNDN);
        mpfr_mul(r11872597, r11872595, r11872596, MPFR_RNDN);
        mpfr_add(r11872598, r11872594, r11872597, MPFR_RNDN);
        mpfr_sub(r11872599, r11872598, r11872592, MPFR_RNDN);
        ;
        mpfr_set_si(r11872601, mpfr_cmp(r11872589, r11872600) <= 0, MPFR_RNDN);
        mpfr_mul(r11872602, r11872581, r11872589, MPFR_RNDN);
        mpfr_sub(r11872603, r11872597, r11872592, MPFR_RNDN);
        mpfr_add(r11872604, r11872594, r11872603, MPFR_RNDN);
        if (mpfr_get_si(r11872601, MPFR_RNDN)) { mpfr_set(r11872605, r11872602, MPFR_RNDN); } else { mpfr_set(r11872605, r11872604, MPFR_RNDN); };
        if (mpfr_get_si(r11872591, MPFR_RNDN)) { mpfr_set(r11872606, r11872599, MPFR_RNDN); } else { mpfr_set(r11872606, r11872605, MPFR_RNDN); };
        return mpfr_get_d(r11872606, MPFR_RNDN);
}

static mpfr_t r11872607, r11872608, r11872609, r11872610, r11872611, r11872612, r11872613, r11872614, r11872615, r11872616, r11872617, r11872618, r11872619, r11872620, r11872621, r11872622, r11872623, r11872624, r11872625, r11872626, r11872627, r11872628, r11872629, r11872630, r11872631, r11872632, r11872633;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r11872607);
        mpfr_init_set_str(r11872608, "2", 10, MPFR_RNDN);
        mpfr_init(r11872609);
        mpfr_init(r11872610);
        mpfr_init(r11872611);
        mpfr_init(r11872612);
        mpfr_init(r11872613);
        mpfr_init(r11872614);
        mpfr_init(r11872615);
        mpfr_init(r11872616);
        mpfr_init_set_str(r11872617, "-3.176887565653019e-10", 10, MPFR_RNDN);
        mpfr_init(r11872618);
        mpfr_init(r11872619);
        mpfr_init(r11872620);
        mpfr_init(r11872621);
        mpfr_init(r11872622);
        mpfr_init(r11872623);
        mpfr_init(r11872624);
        mpfr_init(r11872625);
        mpfr_init(r11872626);
        mpfr_init_set_str(r11872627, "8.161626676704951e-19", 10, MPFR_RNDN);
        mpfr_init(r11872628);
        mpfr_init(r11872629);
        mpfr_init(r11872630);
        mpfr_init(r11872631);
        mpfr_init(r11872632);
        mpfr_init(r11872633);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r11872607, eps, MPFR_RNDN);
        ;
        mpfr_div(r11872609, r11872607, r11872608, MPFR_RNDN);
        mpfr_sin(r11872610, r11872609, MPFR_RNDN);
        mpfr_set_d(r11872611, x, MPFR_RNDN);
        mpfr_add(r11872612, r11872611, r11872611, MPFR_RNDN);
        mpfr_add(r11872613, r11872607, r11872612, MPFR_RNDN);
        mpfr_div(r11872614, r11872613, r11872608, MPFR_RNDN);
        mpfr_cos(r11872615, r11872614, MPFR_RNDN);
        mpfr_mul(r11872616, r11872610, r11872615, MPFR_RNDN);
        ;
        mpfr_set_si(r11872618, mpfr_cmp(r11872616, r11872617) <= 0, MPFR_RNDN);
        mpfr_sin(r11872619, r11872611, MPFR_RNDN);
        mpfr_cos(r11872620, r11872607, MPFR_RNDN);
        mpfr_mul(r11872621, r11872619, r11872620, MPFR_RNDN);
        mpfr_cos(r11872622, r11872611, MPFR_RNDN);
        mpfr_sin(r11872623, r11872607, MPFR_RNDN);
        mpfr_mul(r11872624, r11872622, r11872623, MPFR_RNDN);
        mpfr_add(r11872625, r11872621, r11872624, MPFR_RNDN);
        mpfr_sub(r11872626, r11872625, r11872619, MPFR_RNDN);
        ;
        mpfr_set_si(r11872628, mpfr_cmp(r11872616, r11872627) <= 0, MPFR_RNDN);
        mpfr_mul(r11872629, r11872608, r11872616, MPFR_RNDN);
        mpfr_sub(r11872630, r11872624, r11872619, MPFR_RNDN);
        mpfr_add(r11872631, r11872621, r11872630, MPFR_RNDN);
        if (mpfr_get_si(r11872628, MPFR_RNDN)) { mpfr_set(r11872632, r11872629, MPFR_RNDN); } else { mpfr_set(r11872632, r11872631, MPFR_RNDN); };
        if (mpfr_get_si(r11872618, MPFR_RNDN)) { mpfr_set(r11872633, r11872626, MPFR_RNDN); } else { mpfr_set(r11872633, r11872632, MPFR_RNDN); };
        return mpfr_get_d(r11872633, MPFR_RNDN);
}

