#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 r10909 = x;
        float r10910 = eps;
        float r10911 = r10909 + r10910;
        float r10912 = sin(r10911);
        float r10913 = sin(r10909);
        float r10914 = r10912 - r10913;
        return r10914;
}

double f_id(double x, double eps) {
        double r10915 = x;
        double r10916 = eps;
        double r10917 = r10915 + r10916;
        double r10918 = sin(r10917);
        double r10919 = sin(r10915);
        double r10920 = r10918 - r10919;
        return r10920;
}


double f_of(float x, float eps) {
        float r10921 = eps;
        float r10922 = 1/2;
        float r10923 = r10921 * r10922;
        float r10924 = cos(r10923);
        float r10925 = x;
        float r10926 = cos(r10925);
        float r10927 = r10924 * r10926;
        float r10928 = sin(r10923);
        float r10929 = sin(r10925);
        float r10930 = r10928 * r10929;
        float r10931 = log1p(r10930);
        float r10932 = expm1(r10931);
        float r10933 = r10927 - r10932;
        float r10934 = 2;
        float r10935 = r10921 / r10934;
        float r10936 = sin(r10935);
        float r10937 = r10934 * r10936;
        float r10938 = r10933 * r10937;
        return r10938;
}

double f_od(double x, double eps) {
        double r10939 = eps;
        double r10940 = 1/2;
        double r10941 = r10939 * r10940;
        double r10942 = cos(r10941);
        double r10943 = x;
        double r10944 = cos(r10943);
        double r10945 = r10942 * r10944;
        double r10946 = sin(r10941);
        double r10947 = sin(r10943);
        double r10948 = r10946 * r10947;
        double r10949 = log1p(r10948);
        double r10950 = expm1(r10949);
        double r10951 = r10945 - r10950;
        double r10952 = 2;
        double r10953 = r10939 / r10952;
        double r10954 = sin(r10953);
        double r10955 = r10952 * r10954;
        double r10956 = r10951 * r10955;
        return r10956;
}

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 r10957, r10958, r10959, r10960, r10961, r10962;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10957);
        mpfr_init(r10958);
        mpfr_init(r10959);
        mpfr_init(r10960);
        mpfr_init(r10961);
        mpfr_init(r10962);
}

double f_im(double x, double eps) {
        mpfr_set_d(r10957, x, MPFR_RNDN);
        mpfr_set_d(r10958, eps, MPFR_RNDN);
        mpfr_add(r10959, r10957, r10958, MPFR_RNDN);
        mpfr_sin(r10960, r10959, MPFR_RNDN);
        mpfr_sin(r10961, r10957, MPFR_RNDN);
        mpfr_sub(r10962, r10960, r10961, MPFR_RNDN);
        return mpfr_get_d(r10962, MPFR_RNDN);
}

static mpfr_t r10963, r10964, r10965, r10966, r10967, r10968, r10969, r10970, r10971, r10972, r10973, r10974, r10975, r10976, r10977, r10978, r10979, r10980;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10963);
        mpfr_init_set_str(r10964, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10965);
        mpfr_init(r10966);
        mpfr_init(r10967);
        mpfr_init(r10968);
        mpfr_init(r10969);
        mpfr_init(r10970);
        mpfr_init(r10971);
        mpfr_init(r10972);
        mpfr_init(r10973);
        mpfr_init(r10974);
        mpfr_init(r10975);
        mpfr_init_set_str(r10976, "2", 10, MPFR_RNDN);
        mpfr_init(r10977);
        mpfr_init(r10978);
        mpfr_init(r10979);
        mpfr_init(r10980);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r10963, eps, MPFR_RNDN);
        ;
        mpfr_mul(r10965, r10963, r10964, MPFR_RNDN);
        mpfr_cos(r10966, r10965, MPFR_RNDN);
        mpfr_set_d(r10967, x, MPFR_RNDN);
        mpfr_cos(r10968, r10967, MPFR_RNDN);
        mpfr_mul(r10969, r10966, r10968, MPFR_RNDN);
        mpfr_sin(r10970, r10965, MPFR_RNDN);
        mpfr_sin(r10971, r10967, MPFR_RNDN);
        mpfr_mul(r10972, r10970, r10971, MPFR_RNDN);
        mpfr_log1p(r10973, r10972, MPFR_RNDN);
        mpfr_expm1(r10974, r10973, MPFR_RNDN);
        mpfr_sub(r10975, r10969, r10974, MPFR_RNDN);
        ;
        mpfr_div(r10977, r10963, r10976, MPFR_RNDN);
        mpfr_sin(r10978, r10977, MPFR_RNDN);
        mpfr_mul(r10979, r10976, r10978, MPFR_RNDN);
        mpfr_mul(r10980, r10975, r10979, MPFR_RNDN);
        return mpfr_get_d(r10980, MPFR_RNDN);
}

static mpfr_t r10981, r10982, r10983, r10984, r10985, r10986, r10987, r10988, r10989, r10990, r10991, r10992, r10993, r10994, r10995, r10996, r10997, r10998;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10981);
        mpfr_init_set_str(r10982, "1/2", 10, MPFR_RNDN);
        mpfr_init(r10983);
        mpfr_init(r10984);
        mpfr_init(r10985);
        mpfr_init(r10986);
        mpfr_init(r10987);
        mpfr_init(r10988);
        mpfr_init(r10989);
        mpfr_init(r10990);
        mpfr_init(r10991);
        mpfr_init(r10992);
        mpfr_init(r10993);
        mpfr_init_set_str(r10994, "2", 10, MPFR_RNDN);
        mpfr_init(r10995);
        mpfr_init(r10996);
        mpfr_init(r10997);
        mpfr_init(r10998);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r10981, eps, MPFR_RNDN);
        ;
        mpfr_mul(r10983, r10981, r10982, MPFR_RNDN);
        mpfr_cos(r10984, r10983, MPFR_RNDN);
        mpfr_set_d(r10985, x, MPFR_RNDN);
        mpfr_cos(r10986, r10985, MPFR_RNDN);
        mpfr_mul(r10987, r10984, r10986, MPFR_RNDN);
        mpfr_sin(r10988, r10983, MPFR_RNDN);
        mpfr_sin(r10989, r10985, MPFR_RNDN);
        mpfr_mul(r10990, r10988, r10989, MPFR_RNDN);
        mpfr_log1p(r10991, r10990, MPFR_RNDN);
        mpfr_expm1(r10992, r10991, MPFR_RNDN);
        mpfr_sub(r10993, r10987, r10992, MPFR_RNDN);
        ;
        mpfr_div(r10995, r10981, r10994, MPFR_RNDN);
        mpfr_sin(r10996, r10995, MPFR_RNDN);
        mpfr_mul(r10997, r10994, r10996, MPFR_RNDN);
        mpfr_mul(r10998, r10993, r10997, MPFR_RNDN);
        return mpfr_get_d(r10998, MPFR_RNDN);
}

