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

char *name = "2tan (problem 3.3.2)";

double f_if(float x, float eps) {
        float r10834 = x;
        float r10835 = eps;
        float r10836 = r10834 + r10835;
        float r10837 = tan(r10836);
        float r10838 = tan(r10834);
        float r10839 = r10837 - r10838;
        return r10839;
}

double f_id(double x, double eps) {
        double r10840 = x;
        double r10841 = eps;
        double r10842 = r10840 + r10841;
        double r10843 = tan(r10842);
        double r10844 = tan(r10840);
        double r10845 = r10843 - r10844;
        return r10845;
}


double f_of(float x, float eps) {
        float r10846 = x;
        float r10847 = tan(r10846);
        float r10848 = eps;
        float r10849 = tan(r10848);
        float r10850 = r10847 * r10849;
        float r10851 = sin(r10846);
        float r10852 = r10850 * r10851;
        float r10853 = cos(r10846);
        float r10854 = sin(r10848);
        float r10855 = r10853 * r10854;
        float r10856 = cos(r10848);
        float r10857 = r10855 / r10856;
        float r10858 = -r10857;
        float r10859 = r10852 - r10858;
        float r10860 = 1;
        float r10861 = r10860 - r10850;
        float r10862 = r10861 * r10853;
        float r10863 = r10859 / r10862;
        return r10863;
}

double f_od(double x, double eps) {
        double r10864 = x;
        double r10865 = tan(r10864);
        double r10866 = eps;
        double r10867 = tan(r10866);
        double r10868 = r10865 * r10867;
        double r10869 = sin(r10864);
        double r10870 = r10868 * r10869;
        double r10871 = cos(r10864);
        double r10872 = sin(r10866);
        double r10873 = r10871 * r10872;
        double r10874 = cos(r10866);
        double r10875 = r10873 / r10874;
        double r10876 = -r10875;
        double r10877 = r10870 - r10876;
        double r10878 = 1;
        double r10879 = r10878 - r10868;
        double r10880 = r10879 * r10871;
        double r10881 = r10877 / r10880;
        return r10881;
}

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 r10882, r10883, r10884, r10885, r10886, r10887;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10882);
        mpfr_init(r10883);
        mpfr_init(r10884);
        mpfr_init(r10885);
        mpfr_init(r10886);
        mpfr_init(r10887);
}

double f_im(double x, double eps) {
        mpfr_set_d(r10882, x, MPFR_RNDN);
        mpfr_set_d(r10883, eps, MPFR_RNDN);
        mpfr_add(r10884, r10882, r10883, MPFR_RNDN);
        mpfr_tan(r10885, r10884, MPFR_RNDN);
        mpfr_tan(r10886, r10882, MPFR_RNDN);
        mpfr_sub(r10887, r10885, r10886, MPFR_RNDN);
        return mpfr_get_d(r10887, MPFR_RNDN);
}

static mpfr_t r10888, r10889, r10890, r10891, r10892, r10893, r10894, r10895, r10896, r10897, r10898, r10899, r10900, r10901, r10902, r10903, r10904, r10905;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10888);
        mpfr_init(r10889);
        mpfr_init(r10890);
        mpfr_init(r10891);
        mpfr_init(r10892);
        mpfr_init(r10893);
        mpfr_init(r10894);
        mpfr_init(r10895);
        mpfr_init(r10896);
        mpfr_init(r10897);
        mpfr_init(r10898);
        mpfr_init(r10899);
        mpfr_init(r10900);
        mpfr_init(r10901);
        mpfr_init_set_str(r10902, "1", 10, MPFR_RNDN);
        mpfr_init(r10903);
        mpfr_init(r10904);
        mpfr_init(r10905);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r10888, x, MPFR_RNDN);
        mpfr_tan(r10889, r10888, MPFR_RNDN);
        mpfr_set_d(r10890, eps, MPFR_RNDN);
        mpfr_tan(r10891, r10890, MPFR_RNDN);
        mpfr_mul(r10892, r10889, r10891, MPFR_RNDN);
        mpfr_sin(r10893, r10888, MPFR_RNDN);
        mpfr_mul(r10894, r10892, r10893, MPFR_RNDN);
        mpfr_cos(r10895, r10888, MPFR_RNDN);
        mpfr_sin(r10896, r10890, MPFR_RNDN);
        mpfr_mul(r10897, r10895, r10896, MPFR_RNDN);
        mpfr_cos(r10898, r10890, MPFR_RNDN);
        mpfr_div(r10899, r10897, r10898, MPFR_RNDN);
        mpfr_neg(r10900, r10899, MPFR_RNDN);
        mpfr_sub(r10901, r10894, r10900, MPFR_RNDN);
        ;
        mpfr_sub(r10903, r10902, r10892, MPFR_RNDN);
        mpfr_mul(r10904, r10903, r10895, MPFR_RNDN);
        mpfr_div(r10905, r10901, r10904, MPFR_RNDN);
        return mpfr_get_d(r10905, MPFR_RNDN);
}

static mpfr_t r10906, r10907, r10908, r10909, r10910, r10911, r10912, r10913, r10914, r10915, r10916, r10917, r10918, r10919, r10920, r10921, r10922, r10923;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10906);
        mpfr_init(r10907);
        mpfr_init(r10908);
        mpfr_init(r10909);
        mpfr_init(r10910);
        mpfr_init(r10911);
        mpfr_init(r10912);
        mpfr_init(r10913);
        mpfr_init(r10914);
        mpfr_init(r10915);
        mpfr_init(r10916);
        mpfr_init(r10917);
        mpfr_init(r10918);
        mpfr_init(r10919);
        mpfr_init_set_str(r10920, "1", 10, MPFR_RNDN);
        mpfr_init(r10921);
        mpfr_init(r10922);
        mpfr_init(r10923);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r10906, x, MPFR_RNDN);
        mpfr_tan(r10907, r10906, MPFR_RNDN);
        mpfr_set_d(r10908, eps, MPFR_RNDN);
        mpfr_tan(r10909, r10908, MPFR_RNDN);
        mpfr_mul(r10910, r10907, r10909, MPFR_RNDN);
        mpfr_sin(r10911, r10906, MPFR_RNDN);
        mpfr_mul(r10912, r10910, r10911, MPFR_RNDN);
        mpfr_cos(r10913, r10906, MPFR_RNDN);
        mpfr_sin(r10914, r10908, MPFR_RNDN);
        mpfr_mul(r10915, r10913, r10914, MPFR_RNDN);
        mpfr_cos(r10916, r10908, MPFR_RNDN);
        mpfr_div(r10917, r10915, r10916, MPFR_RNDN);
        mpfr_neg(r10918, r10917, MPFR_RNDN);
        mpfr_sub(r10919, r10912, r10918, MPFR_RNDN);
        ;
        mpfr_sub(r10921, r10920, r10910, MPFR_RNDN);
        mpfr_mul(r10922, r10921, r10913, MPFR_RNDN);
        mpfr_div(r10923, r10919, r10922, MPFR_RNDN);
        return mpfr_get_d(r10923, MPFR_RNDN);
}

