#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "(+ x (- (tan (+ y z)) (tan a)))";

double f_if(float x, float y, float z, float a) {
        float r10801 = x;
        float r10802 = y;
        float r10803 = z;
        float r10804 = r10802 + r10803;
        float r10805 = tan(r10804);
        float r10806 = a;
        float r10807 = tan(r10806);
        float r10808 = r10805 - r10807;
        float r10809 = r10801 + r10808;
        return r10809;
}

double f_id(double x, double y, double z, double a) {
        double r10810 = x;
        double r10811 = y;
        double r10812 = z;
        double r10813 = r10811 + r10812;
        double r10814 = tan(r10813);
        double r10815 = a;
        double r10816 = tan(r10815);
        double r10817 = r10814 - r10816;
        double r10818 = r10810 + r10817;
        return r10818;
}


double f_of(float x, float y, float z, float a) {
        float r10819 = x;
        float r10820 = y;
        float r10821 = tan(r10820);
        float r10822 = z;
        float r10823 = tan(r10822);
        float r10824 = r10821 + r10823;
        float r10825 = 1;
        float r10826 = r10821 * r10823;
        float r10827 = exp(r10826);
        float r10828 = log(r10827);
        float r10829 = r10825 - r10828;
        float r10830 = r10824 / r10829;
        float r10831 = a;
        float r10832 = tan(r10831);
        float r10833 = r10830 - r10832;
        float r10834 = r10819 + r10833;
        return r10834;
}

double f_od(double x, double y, double z, double a) {
        double r10835 = x;
        double r10836 = y;
        double r10837 = tan(r10836);
        double r10838 = z;
        double r10839 = tan(r10838);
        double r10840 = r10837 + r10839;
        double r10841 = 1;
        double r10842 = r10837 * r10839;
        double r10843 = exp(r10842);
        double r10844 = log(r10843);
        double r10845 = r10841 - r10844;
        double r10846 = r10840 / r10845;
        double r10847 = a;
        double r10848 = tan(r10847);
        double r10849 = r10846 - r10848;
        double r10850 = r10835 + r10849;
        return r10850;
}

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 r10851, r10852, r10853, r10854, r10855, r10856, r10857, r10858, r10859;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10851);
        mpfr_init(r10852);
        mpfr_init(r10853);
        mpfr_init(r10854);
        mpfr_init(r10855);
        mpfr_init(r10856);
        mpfr_init(r10857);
        mpfr_init(r10858);
        mpfr_init(r10859);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r10851, x, MPFR_RNDN);
        mpfr_set_d(r10852, y, MPFR_RNDN);
        mpfr_set_d(r10853, z, MPFR_RNDN);
        mpfr_add(r10854, r10852, r10853, MPFR_RNDN);
        mpfr_tan(r10855, r10854, MPFR_RNDN);
        mpfr_set_d(r10856, a, MPFR_RNDN);
        mpfr_tan(r10857, r10856, MPFR_RNDN);
        mpfr_sub(r10858, r10855, r10857, MPFR_RNDN);
        mpfr_add(r10859, r10851, r10858, MPFR_RNDN);
        return mpfr_get_d(r10859, MPFR_RNDN);
}

static mpfr_t r10860, r10861, r10862, r10863, r10864, r10865, r10866, r10867, r10868, r10869, r10870, r10871, r10872, r10873, r10874, r10875;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10860);
        mpfr_init(r10861);
        mpfr_init(r10862);
        mpfr_init(r10863);
        mpfr_init(r10864);
        mpfr_init(r10865);
        mpfr_init_set_str(r10866, "1", 10, MPFR_RNDN);
        mpfr_init(r10867);
        mpfr_init(r10868);
        mpfr_init(r10869);
        mpfr_init(r10870);
        mpfr_init(r10871);
        mpfr_init(r10872);
        mpfr_init(r10873);
        mpfr_init(r10874);
        mpfr_init(r10875);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r10860, x, MPFR_RNDN);
        mpfr_set_d(r10861, y, MPFR_RNDN);
        mpfr_tan(r10862, r10861, MPFR_RNDN);
        mpfr_set_d(r10863, z, MPFR_RNDN);
        mpfr_tan(r10864, r10863, MPFR_RNDN);
        mpfr_add(r10865, r10862, r10864, MPFR_RNDN);
        ;
        mpfr_mul(r10867, r10862, r10864, MPFR_RNDN);
        mpfr_exp(r10868, r10867, MPFR_RNDN);
        mpfr_log(r10869, r10868, MPFR_RNDN);
        mpfr_sub(r10870, r10866, r10869, MPFR_RNDN);
        mpfr_div(r10871, r10865, r10870, MPFR_RNDN);
        mpfr_set_d(r10872, a, MPFR_RNDN);
        mpfr_tan(r10873, r10872, MPFR_RNDN);
        mpfr_sub(r10874, r10871, r10873, MPFR_RNDN);
        mpfr_add(r10875, r10860, r10874, MPFR_RNDN);
        return mpfr_get_d(r10875, MPFR_RNDN);
}

static mpfr_t r10876, r10877, r10878, r10879, r10880, r10881, r10882, r10883, r10884, r10885, r10886, r10887, r10888, r10889, r10890, r10891;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10876);
        mpfr_init(r10877);
        mpfr_init(r10878);
        mpfr_init(r10879);
        mpfr_init(r10880);
        mpfr_init(r10881);
        mpfr_init_set_str(r10882, "1", 10, MPFR_RNDN);
        mpfr_init(r10883);
        mpfr_init(r10884);
        mpfr_init(r10885);
        mpfr_init(r10886);
        mpfr_init(r10887);
        mpfr_init(r10888);
        mpfr_init(r10889);
        mpfr_init(r10890);
        mpfr_init(r10891);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r10876, x, MPFR_RNDN);
        mpfr_set_d(r10877, y, MPFR_RNDN);
        mpfr_tan(r10878, r10877, MPFR_RNDN);
        mpfr_set_d(r10879, z, MPFR_RNDN);
        mpfr_tan(r10880, r10879, MPFR_RNDN);
        mpfr_add(r10881, r10878, r10880, MPFR_RNDN);
        ;
        mpfr_mul(r10883, r10878, r10880, MPFR_RNDN);
        mpfr_exp(r10884, r10883, MPFR_RNDN);
        mpfr_log(r10885, r10884, MPFR_RNDN);
        mpfr_sub(r10886, r10882, r10885, MPFR_RNDN);
        mpfr_div(r10887, r10881, r10886, MPFR_RNDN);
        mpfr_set_d(r10888, a, MPFR_RNDN);
        mpfr_tan(r10889, r10888, MPFR_RNDN);
        mpfr_sub(r10890, r10887, r10889, MPFR_RNDN);
        mpfr_add(r10891, r10876, r10890, MPFR_RNDN);
        return mpfr_get_d(r10891, MPFR_RNDN);
}

