#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 r24870 = x;
        float r24871 = eps;
        float r24872 = r24870 + r24871;
        float r24873 = sin(r24872);
        float r24874 = sin(r24870);
        float r24875 = r24873 - r24874;
        return r24875;
}

double f_id(double x, double eps) {
        double r24876 = x;
        double r24877 = eps;
        double r24878 = r24876 + r24877;
        double r24879 = sin(r24878);
        double r24880 = sin(r24876);
        double r24881 = r24879 - r24880;
        return r24881;
}


double f_of(float x, float eps) {
        float r24882 = eps;
        float r24883 = -0.07931234607341223;
        bool r24884 = r24882 <= r24883;
        float r24885 = x;
        float r24886 = sin(r24885);
        float r24887 = cos(r24882);
        float r24888 = r24886 * r24887;
        float r24889 = cos(r24885);
        float r24890 = sin(r24882);
        float r24891 = r24889 * r24890;
        float r24892 = r24891 - r24886;
        float r24893 = r24888 + r24892;
        float r24894 = 3.429713180549766e-15;
        bool r24895 = r24882 <= r24894;
        float r24896 = 2;
        float r24897 = r24882 / r24896;
        float r24898 = sin(r24897);
        float r24899 = r24882 + r24885;
        float r24900 = r24885 + r24899;
        float r24901 = r24900 / r24896;
        float r24902 = cos(r24901);
        float r24903 = expm1(r24902);
        float r24904 = log1p(r24903);
        float r24905 = r24898 * r24904;
        float r24906 = r24896 * r24905;
        float r24907 = r24888 + r24891;
        float r24908 = r24907 - r24886;
        float r24909 = r24895 ? r24906 : r24908;
        float r24910 = r24884 ? r24893 : r24909;
        return r24910;
}

double f_od(double x, double eps) {
        double r24911 = eps;
        double r24912 = -0.07931234607341223;
        bool r24913 = r24911 <= r24912;
        double r24914 = x;
        double r24915 = sin(r24914);
        double r24916 = cos(r24911);
        double r24917 = r24915 * r24916;
        double r24918 = cos(r24914);
        double r24919 = sin(r24911);
        double r24920 = r24918 * r24919;
        double r24921 = r24920 - r24915;
        double r24922 = r24917 + r24921;
        double r24923 = 3.429713180549766e-15;
        bool r24924 = r24911 <= r24923;
        double r24925 = 2;
        double r24926 = r24911 / r24925;
        double r24927 = sin(r24926);
        double r24928 = r24911 + r24914;
        double r24929 = r24914 + r24928;
        double r24930 = r24929 / r24925;
        double r24931 = cos(r24930);
        double r24932 = expm1(r24931);
        double r24933 = log1p(r24932);
        double r24934 = r24927 * r24933;
        double r24935 = r24925 * r24934;
        double r24936 = r24917 + r24920;
        double r24937 = r24936 - r24915;
        double r24938 = r24924 ? r24935 : r24937;
        double r24939 = r24913 ? r24922 : r24938;
        return r24939;
}

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 r24940, r24941, r24942, r24943, r24944, r24945;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r24940);
        mpfr_init(r24941);
        mpfr_init(r24942);
        mpfr_init(r24943);
        mpfr_init(r24944);
        mpfr_init(r24945);
}

double f_im(double x, double eps) {
        mpfr_set_d(r24940, x, MPFR_RNDN);
        mpfr_set_d(r24941, eps, MPFR_RNDN);
        mpfr_add(r24942, r24940, r24941, MPFR_RNDN);
        mpfr_sin(r24943, r24942, MPFR_RNDN);
        mpfr_sin(r24944, r24940, MPFR_RNDN);
        mpfr_sub(r24945, r24943, r24944, MPFR_RNDN);
        return mpfr_get_d(r24945, MPFR_RNDN);
}

static mpfr_t r24946, r24947, r24948, r24949, r24950, r24951, r24952, r24953, r24954, r24955, r24956, r24957, r24958, r24959, r24960, r24961, r24962, r24963, r24964, r24965, r24966, r24967, r24968, r24969, r24970, r24971, r24972, r24973, r24974;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r24946);
        mpfr_init_set_str(r24947, "-0.07931234607341223", 10, MPFR_RNDN);
        mpfr_init(r24948);
        mpfr_init(r24949);
        mpfr_init(r24950);
        mpfr_init(r24951);
        mpfr_init(r24952);
        mpfr_init(r24953);
        mpfr_init(r24954);
        mpfr_init(r24955);
        mpfr_init(r24956);
        mpfr_init(r24957);
        mpfr_init_set_str(r24958, "3.429713180549766e-15", 10, MPFR_RNDN);
        mpfr_init(r24959);
        mpfr_init_set_str(r24960, "2", 10, MPFR_RNDN);
        mpfr_init(r24961);
        mpfr_init(r24962);
        mpfr_init(r24963);
        mpfr_init(r24964);
        mpfr_init(r24965);
        mpfr_init(r24966);
        mpfr_init(r24967);
        mpfr_init(r24968);
        mpfr_init(r24969);
        mpfr_init(r24970);
        mpfr_init(r24971);
        mpfr_init(r24972);
        mpfr_init(r24973);
        mpfr_init(r24974);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r24946, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r24948, mpfr_cmp(r24946, r24947) <= 0, MPFR_RNDN);
        mpfr_set_d(r24949, x, MPFR_RNDN);
        mpfr_sin(r24950, r24949, MPFR_RNDN);
        mpfr_cos(r24951, r24946, MPFR_RNDN);
        mpfr_mul(r24952, r24950, r24951, MPFR_RNDN);
        mpfr_cos(r24953, r24949, MPFR_RNDN);
        mpfr_sin(r24954, r24946, MPFR_RNDN);
        mpfr_mul(r24955, r24953, r24954, MPFR_RNDN);
        mpfr_sub(r24956, r24955, r24950, MPFR_RNDN);
        mpfr_add(r24957, r24952, r24956, MPFR_RNDN);
        ;
        mpfr_set_si(r24959, mpfr_cmp(r24946, r24958) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r24961, r24946, r24960, MPFR_RNDN);
        mpfr_sin(r24962, r24961, MPFR_RNDN);
        mpfr_add(r24963, r24946, r24949, MPFR_RNDN);
        mpfr_add(r24964, r24949, r24963, MPFR_RNDN);
        mpfr_div(r24965, r24964, r24960, MPFR_RNDN);
        mpfr_cos(r24966, r24965, MPFR_RNDN);
        mpfr_expm1(r24967, r24966, MPFR_RNDN);
        mpfr_log1p(r24968, r24967, MPFR_RNDN);
        mpfr_mul(r24969, r24962, r24968, MPFR_RNDN);
        mpfr_mul(r24970, r24960, r24969, MPFR_RNDN);
        mpfr_add(r24971, r24952, r24955, MPFR_RNDN);
        mpfr_sub(r24972, r24971, r24950, MPFR_RNDN);
        if (mpfr_get_si(r24959, MPFR_RNDN)) { mpfr_set(r24973, r24970, MPFR_RNDN); } else { mpfr_set(r24973, r24972, MPFR_RNDN); };
        if (mpfr_get_si(r24948, MPFR_RNDN)) { mpfr_set(r24974, r24957, MPFR_RNDN); } else { mpfr_set(r24974, r24973, MPFR_RNDN); };
        return mpfr_get_d(r24974, MPFR_RNDN);
}

static mpfr_t r24975, r24976, r24977, r24978, r24979, r24980, r24981, r24982, r24983, r24984, r24985, r24986, r24987, r24988, r24989, r24990, r24991, r24992, r24993, r24994, r24995, r24996, r24997, r24998, r24999, r25000, r25001, r25002, r25003;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r24975);
        mpfr_init_set_str(r24976, "-0.07931234607341223", 10, MPFR_RNDN);
        mpfr_init(r24977);
        mpfr_init(r24978);
        mpfr_init(r24979);
        mpfr_init(r24980);
        mpfr_init(r24981);
        mpfr_init(r24982);
        mpfr_init(r24983);
        mpfr_init(r24984);
        mpfr_init(r24985);
        mpfr_init(r24986);
        mpfr_init_set_str(r24987, "3.429713180549766e-15", 10, MPFR_RNDN);
        mpfr_init(r24988);
        mpfr_init_set_str(r24989, "2", 10, MPFR_RNDN);
        mpfr_init(r24990);
        mpfr_init(r24991);
        mpfr_init(r24992);
        mpfr_init(r24993);
        mpfr_init(r24994);
        mpfr_init(r24995);
        mpfr_init(r24996);
        mpfr_init(r24997);
        mpfr_init(r24998);
        mpfr_init(r24999);
        mpfr_init(r25000);
        mpfr_init(r25001);
        mpfr_init(r25002);
        mpfr_init(r25003);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r24975, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r24977, mpfr_cmp(r24975, r24976) <= 0, MPFR_RNDN);
        mpfr_set_d(r24978, x, MPFR_RNDN);
        mpfr_sin(r24979, r24978, MPFR_RNDN);
        mpfr_cos(r24980, r24975, MPFR_RNDN);
        mpfr_mul(r24981, r24979, r24980, MPFR_RNDN);
        mpfr_cos(r24982, r24978, MPFR_RNDN);
        mpfr_sin(r24983, r24975, MPFR_RNDN);
        mpfr_mul(r24984, r24982, r24983, MPFR_RNDN);
        mpfr_sub(r24985, r24984, r24979, MPFR_RNDN);
        mpfr_add(r24986, r24981, r24985, MPFR_RNDN);
        ;
        mpfr_set_si(r24988, mpfr_cmp(r24975, r24987) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r24990, r24975, r24989, MPFR_RNDN);
        mpfr_sin(r24991, r24990, MPFR_RNDN);
        mpfr_add(r24992, r24975, r24978, MPFR_RNDN);
        mpfr_add(r24993, r24978, r24992, MPFR_RNDN);
        mpfr_div(r24994, r24993, r24989, MPFR_RNDN);
        mpfr_cos(r24995, r24994, MPFR_RNDN);
        mpfr_expm1(r24996, r24995, MPFR_RNDN);
        mpfr_log1p(r24997, r24996, MPFR_RNDN);
        mpfr_mul(r24998, r24991, r24997, MPFR_RNDN);
        mpfr_mul(r24999, r24989, r24998, MPFR_RNDN);
        mpfr_add(r25000, r24981, r24984, MPFR_RNDN);
        mpfr_sub(r25001, r25000, r24979, MPFR_RNDN);
        if (mpfr_get_si(r24988, MPFR_RNDN)) { mpfr_set(r25002, r24999, MPFR_RNDN); } else { mpfr_set(r25002, r25001, MPFR_RNDN); };
        if (mpfr_get_si(r24977, MPFR_RNDN)) { mpfr_set(r25003, r24986, MPFR_RNDN); } else { mpfr_set(r25003, r25002, MPFR_RNDN); };
        return mpfr_get_d(r25003, MPFR_RNDN);
}

