#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 r27806 = x;
        float r27807 = eps;
        float r27808 = r27806 + r27807;
        float r27809 = sin(r27808);
        float r27810 = sin(r27806);
        float r27811 = r27809 - r27810;
        return r27811;
}

double f_id(double x, double eps) {
        double r27812 = x;
        double r27813 = eps;
        double r27814 = r27812 + r27813;
        double r27815 = sin(r27814);
        double r27816 = sin(r27812);
        double r27817 = r27815 - r27816;
        return r27817;
}


double f_of(float x, float eps) {
        float r27818 = x;
        float r27819 = sin(r27818);
        float r27820 = eps;
        float r27821 = cos(r27820);
        float r27822 = r27819 * r27821;
        float r27823 = cos(r27818);
        float r27824 = sin(r27820);
        float r27825 = r27823 * r27824;
        float r27826 = r27825 - r27819;
        float r27827 = r27822 + r27826;
        float r27828 = -1.2733325417874189e-07;
        bool r27829 = r27827 <= r27828;
        float r27830 = 1.8965811971238142e-60;
        bool r27831 = r27827 <= r27830;
        float r27832 = 2;
        float r27833 = r27820 / r27832;
        float r27834 = sin(r27833);
        float r27835 = r27820 + r27818;
        float r27836 = r27818 + r27835;
        float r27837 = r27836 / r27832;
        float r27838 = cos(r27837);
        float r27839 = r27834 * r27838;
        float r27840 = r27832 * r27839;
        float r27841 = r27822 + r27825;
        float r27842 = r27841 - r27819;
        float r27843 = r27831 ? r27840 : r27842;
        float r27844 = r27829 ? r27827 : r27843;
        return r27844;
}

double f_od(double x, double eps) {
        double r27845 = x;
        double r27846 = sin(r27845);
        double r27847 = eps;
        double r27848 = cos(r27847);
        double r27849 = r27846 * r27848;
        double r27850 = cos(r27845);
        double r27851 = sin(r27847);
        double r27852 = r27850 * r27851;
        double r27853 = r27852 - r27846;
        double r27854 = r27849 + r27853;
        double r27855 = -1.2733325417874189e-07;
        bool r27856 = r27854 <= r27855;
        double r27857 = 1.8965811971238142e-60;
        bool r27858 = r27854 <= r27857;
        double r27859 = 2;
        double r27860 = r27847 / r27859;
        double r27861 = sin(r27860);
        double r27862 = r27847 + r27845;
        double r27863 = r27845 + r27862;
        double r27864 = r27863 / r27859;
        double r27865 = cos(r27864);
        double r27866 = r27861 * r27865;
        double r27867 = r27859 * r27866;
        double r27868 = r27849 + r27852;
        double r27869 = r27868 - r27846;
        double r27870 = r27858 ? r27867 : r27869;
        double r27871 = r27856 ? r27854 : r27870;
        return r27871;
}

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 r27872, r27873, r27874, r27875, r27876, r27877;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27872);
        mpfr_init(r27873);
        mpfr_init(r27874);
        mpfr_init(r27875);
        mpfr_init(r27876);
        mpfr_init(r27877);
}

double f_im(double x, double eps) {
        mpfr_set_d(r27872, x, MPFR_RNDN);
        mpfr_set_d(r27873, eps, MPFR_RNDN);
        mpfr_add(r27874, r27872, r27873, MPFR_RNDN);
        mpfr_sin(r27875, r27874, MPFR_RNDN);
        mpfr_sin(r27876, r27872, MPFR_RNDN);
        mpfr_sub(r27877, r27875, r27876, MPFR_RNDN);
        return mpfr_get_d(r27877, MPFR_RNDN);
}

static mpfr_t r27878, r27879, r27880, r27881, r27882, r27883, r27884, r27885, r27886, r27887, r27888, r27889, r27890, r27891, r27892, r27893, r27894, r27895, r27896, r27897, r27898, r27899, r27900, r27901, r27902, r27903, r27904;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27878);
        mpfr_init(r27879);
        mpfr_init(r27880);
        mpfr_init(r27881);
        mpfr_init(r27882);
        mpfr_init(r27883);
        mpfr_init(r27884);
        mpfr_init(r27885);
        mpfr_init(r27886);
        mpfr_init(r27887);
        mpfr_init_set_str(r27888, "-1.2733325417874189e-07", 10, MPFR_RNDN);
        mpfr_init(r27889);
        mpfr_init_set_str(r27890, "1.8965811971238142e-60", 10, MPFR_RNDN);
        mpfr_init(r27891);
        mpfr_init_set_str(r27892, "2", 10, MPFR_RNDN);
        mpfr_init(r27893);
        mpfr_init(r27894);
        mpfr_init(r27895);
        mpfr_init(r27896);
        mpfr_init(r27897);
        mpfr_init(r27898);
        mpfr_init(r27899);
        mpfr_init(r27900);
        mpfr_init(r27901);
        mpfr_init(r27902);
        mpfr_init(r27903);
        mpfr_init(r27904);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r27878, x, MPFR_RNDN);
        mpfr_sin(r27879, r27878, MPFR_RNDN);
        mpfr_set_d(r27880, eps, MPFR_RNDN);
        mpfr_cos(r27881, r27880, MPFR_RNDN);
        mpfr_mul(r27882, r27879, r27881, MPFR_RNDN);
        mpfr_cos(r27883, r27878, MPFR_RNDN);
        mpfr_sin(r27884, r27880, MPFR_RNDN);
        mpfr_mul(r27885, r27883, r27884, MPFR_RNDN);
        mpfr_sub(r27886, r27885, r27879, MPFR_RNDN);
        mpfr_add(r27887, r27882, r27886, MPFR_RNDN);
        ;
        mpfr_set_si(r27889, mpfr_cmp(r27887, r27888) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27891, mpfr_cmp(r27887, r27890) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27893, r27880, r27892, MPFR_RNDN);
        mpfr_sin(r27894, r27893, MPFR_RNDN);
        mpfr_add(r27895, r27880, r27878, MPFR_RNDN);
        mpfr_add(r27896, r27878, r27895, MPFR_RNDN);
        mpfr_div(r27897, r27896, r27892, MPFR_RNDN);
        mpfr_cos(r27898, r27897, MPFR_RNDN);
        mpfr_mul(r27899, r27894, r27898, MPFR_RNDN);
        mpfr_mul(r27900, r27892, r27899, MPFR_RNDN);
        mpfr_add(r27901, r27882, r27885, MPFR_RNDN);
        mpfr_sub(r27902, r27901, r27879, MPFR_RNDN);
        if (mpfr_get_si(r27891, MPFR_RNDN)) { mpfr_set(r27903, r27900, MPFR_RNDN); } else { mpfr_set(r27903, r27902, MPFR_RNDN); };
        if (mpfr_get_si(r27889, MPFR_RNDN)) { mpfr_set(r27904, r27887, MPFR_RNDN); } else { mpfr_set(r27904, r27903, MPFR_RNDN); };
        return mpfr_get_d(r27904, MPFR_RNDN);
}

static mpfr_t r27905, r27906, r27907, r27908, r27909, r27910, r27911, r27912, r27913, r27914, r27915, r27916, r27917, r27918, r27919, r27920, r27921, r27922, r27923, r27924, r27925, r27926, r27927, r27928, r27929, r27930, r27931;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27905);
        mpfr_init(r27906);
        mpfr_init(r27907);
        mpfr_init(r27908);
        mpfr_init(r27909);
        mpfr_init(r27910);
        mpfr_init(r27911);
        mpfr_init(r27912);
        mpfr_init(r27913);
        mpfr_init(r27914);
        mpfr_init_set_str(r27915, "-1.2733325417874189e-07", 10, MPFR_RNDN);
        mpfr_init(r27916);
        mpfr_init_set_str(r27917, "1.8965811971238142e-60", 10, MPFR_RNDN);
        mpfr_init(r27918);
        mpfr_init_set_str(r27919, "2", 10, MPFR_RNDN);
        mpfr_init(r27920);
        mpfr_init(r27921);
        mpfr_init(r27922);
        mpfr_init(r27923);
        mpfr_init(r27924);
        mpfr_init(r27925);
        mpfr_init(r27926);
        mpfr_init(r27927);
        mpfr_init(r27928);
        mpfr_init(r27929);
        mpfr_init(r27930);
        mpfr_init(r27931);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r27905, x, MPFR_RNDN);
        mpfr_sin(r27906, r27905, MPFR_RNDN);
        mpfr_set_d(r27907, eps, MPFR_RNDN);
        mpfr_cos(r27908, r27907, MPFR_RNDN);
        mpfr_mul(r27909, r27906, r27908, MPFR_RNDN);
        mpfr_cos(r27910, r27905, MPFR_RNDN);
        mpfr_sin(r27911, r27907, MPFR_RNDN);
        mpfr_mul(r27912, r27910, r27911, MPFR_RNDN);
        mpfr_sub(r27913, r27912, r27906, MPFR_RNDN);
        mpfr_add(r27914, r27909, r27913, MPFR_RNDN);
        ;
        mpfr_set_si(r27916, mpfr_cmp(r27914, r27915) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27918, mpfr_cmp(r27914, r27917) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27920, r27907, r27919, MPFR_RNDN);
        mpfr_sin(r27921, r27920, MPFR_RNDN);
        mpfr_add(r27922, r27907, r27905, MPFR_RNDN);
        mpfr_add(r27923, r27905, r27922, MPFR_RNDN);
        mpfr_div(r27924, r27923, r27919, MPFR_RNDN);
        mpfr_cos(r27925, r27924, MPFR_RNDN);
        mpfr_mul(r27926, r27921, r27925, MPFR_RNDN);
        mpfr_mul(r27927, r27919, r27926, MPFR_RNDN);
        mpfr_add(r27928, r27909, r27912, MPFR_RNDN);
        mpfr_sub(r27929, r27928, r27906, MPFR_RNDN);
        if (mpfr_get_si(r27918, MPFR_RNDN)) { mpfr_set(r27930, r27927, MPFR_RNDN); } else { mpfr_set(r27930, r27929, MPFR_RNDN); };
        if (mpfr_get_si(r27916, MPFR_RNDN)) { mpfr_set(r27931, r27914, MPFR_RNDN); } else { mpfr_set(r27931, r27930, MPFR_RNDN); };
        return mpfr_get_d(r27931, MPFR_RNDN);
}

