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

char *name = "NMSE example 3.4";

double f_if(float x) {
        float r5320799 = 1.0f;
        float r5320800 = x;
        float r5320801 = cos(r5320800);
        float r5320802 = r5320799 - r5320801;
        float r5320803 = sin(r5320800);
        float r5320804 = r5320802 / r5320803;
        return r5320804;
}

double f_id(double x) {
        double r5320805 = 1.0;
        double r5320806 = x;
        double r5320807 = cos(r5320806);
        double r5320808 = r5320805 - r5320807;
        double r5320809 = sin(r5320806);
        double r5320810 = r5320808 / r5320809;
        return r5320810;
}


double f_of(float x) {
        float r5320811 = x;
        float r5320812 = -7.621017336353511e-15f;
        bool r5320813 = r5320811 <= r5320812;
        float r5320814 = sin(r5320811);
        float r5320815 = r5320814 * r5320814;
        float r5320816 = 1.0f;
        float r5320817 = cos(r5320811);
        float r5320818 = r5320816 + r5320817;
        float r5320819 = r5320815 / r5320818;
        float r5320820 = r5320819 / r5320814;
        float r5320821 = 3.265136463998974e-32f;
        bool r5320822 = r5320811 <= r5320821;
        float r5320823 = 0.041666666666666664f;
        float r5320824 = r5320811 * (r5320811 * r5320811);
        float r5320825 = r5320823 * r5320824;
        float r5320826 = 5.0f;
        float r5320827 = pow(r5320811, r5320826);
        float r5320828 = 0.004166666666666667f;
        float r5320829 = r5320827 * r5320828;
        float r5320830 = 0.5f;
        float r5320831 = r5320811 * r5320830;
        float r5320832 = r5320829 + r5320831;
        float r5320833 = r5320825 + r5320832;
        float r5320834 = r5320822 ? r5320833 : r5320820;
        float r5320835 = r5320813 ? r5320820 : r5320834;
        return r5320835;
}

double f_od(double x) {
        double r5320836 = x;
        double r5320837 = -7.621017336353511e-15;
        bool r5320838 = r5320836 <= r5320837;
        double r5320839 = sin(r5320836);
        double r5320840 = r5320839 * r5320839;
        double r5320841 = 1.0;
        double r5320842 = cos(r5320836);
        double r5320843 = r5320841 + r5320842;
        double r5320844 = r5320840 / r5320843;
        double r5320845 = r5320844 / r5320839;
        double r5320846 = 3.265136463998974e-32;
        bool r5320847 = r5320836 <= r5320846;
        double r5320848 = 0.041666666666666664;
        double r5320849 = r5320836 * (r5320836 * r5320836);
        double r5320850 = r5320848 * r5320849;
        double r5320851 = 5.0;
        double r5320852 = pow(r5320836, r5320851);
        double r5320853 = 0.004166666666666667;
        double r5320854 = r5320852 * r5320853;
        double r5320855 = 0.5;
        double r5320856 = r5320836 * r5320855;
        double r5320857 = r5320854 + r5320856;
        double r5320858 = r5320850 + r5320857;
        double r5320859 = r5320847 ? r5320858 : r5320845;
        double r5320860 = r5320838 ? r5320845 : r5320859;
        return r5320860;
}

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 r5320861, r5320862, r5320863, r5320864, r5320865, r5320866;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5320861, "1", 10, MPFR_RNDN);
        mpfr_init(r5320862);
        mpfr_init(r5320863);
        mpfr_init(r5320864);
        mpfr_init(r5320865);
        mpfr_init(r5320866);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5320862, x, MPFR_RNDN);
        mpfr_cos(r5320863, r5320862, MPFR_RNDN);
        mpfr_sub(r5320864, r5320861, r5320863, MPFR_RNDN);
        mpfr_sin(r5320865, r5320862, MPFR_RNDN);
        mpfr_div(r5320866, r5320864, r5320865, MPFR_RNDN);
        return mpfr_get_d(r5320866, MPFR_RNDN);
}

static mpfr_t r5320867, r5320868, r5320869, r5320870, r5320871, r5320872, r5320873, r5320874, r5320875, r5320876, r5320877, r5320878, r5320879, r5320880, r5320881, r5320882, r5320883, r5320884, r5320885, r5320886, r5320887, r5320888, r5320889, r5320890, r5320891;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320867);
        mpfr_init_set_str(r5320868, "-7.621017336353511e-15", 10, MPFR_RNDN);
        mpfr_init(r5320869);
        mpfr_init(r5320870);
        mpfr_init(r5320871);
        mpfr_init_set_str(r5320872, "1", 10, MPFR_RNDN);
        mpfr_init(r5320873);
        mpfr_init(r5320874);
        mpfr_init(r5320875);
        mpfr_init(r5320876);
        mpfr_init_set_str(r5320877, "3.265136463998974e-32", 10, MPFR_RNDN);
        mpfr_init(r5320878);
        mpfr_init_set_str(r5320879, "1/24", 10, MPFR_RNDN);
        mpfr_init(r5320880);
        mpfr_init(r5320881);
        mpfr_init_set_str(r5320882, "5", 10, MPFR_RNDN);
        mpfr_init(r5320883);
        mpfr_init_set_str(r5320884, "1/240", 10, MPFR_RNDN);
        mpfr_init(r5320885);
        mpfr_init_set_str(r5320886, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5320887);
        mpfr_init(r5320888);
        mpfr_init(r5320889);
        mpfr_init(r5320890);
        mpfr_init(r5320891);
}

double f_fm(double x) {
        mpfr_set_d(r5320867, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5320869, mpfr_cmp(r5320867, r5320868) <= 0, MPFR_RNDN);
        mpfr_sin(r5320870, r5320867, MPFR_RNDN);
        mpfr_mul(r5320871, r5320870, r5320870, MPFR_RNDN);
        ;
        mpfr_cos(r5320873, r5320867, MPFR_RNDN);
        mpfr_add(r5320874, r5320872, r5320873, MPFR_RNDN);
        mpfr_div(r5320875, r5320871, r5320874, MPFR_RNDN);
        mpfr_div(r5320876, r5320875, r5320870, MPFR_RNDN);
        ;
        mpfr_set_si(r5320878, mpfr_cmp(r5320867, r5320877) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5320880, r5320867, r5320867, MPFR_RNDN); mpfr_mul(r5320880, r5320880, r5320867, MPFR_RNDN);
        mpfr_mul(r5320881, r5320879, r5320880, MPFR_RNDN);
        ;
        mpfr_pow(r5320883, r5320867, r5320882, MPFR_RNDN);
        ;
        mpfr_mul(r5320885, r5320883, r5320884, MPFR_RNDN);
        ;
        mpfr_mul(r5320887, r5320867, r5320886, MPFR_RNDN);
        mpfr_add(r5320888, r5320885, r5320887, MPFR_RNDN);
        mpfr_add(r5320889, r5320881, r5320888, MPFR_RNDN);
        if (mpfr_get_si(r5320878, MPFR_RNDN)) { mpfr_set(r5320890, r5320889, MPFR_RNDN); } else { mpfr_set(r5320890, r5320876, MPFR_RNDN); };
        if (mpfr_get_si(r5320869, MPFR_RNDN)) { mpfr_set(r5320891, r5320876, MPFR_RNDN); } else { mpfr_set(r5320891, r5320890, MPFR_RNDN); };
        return mpfr_get_d(r5320891, MPFR_RNDN);
}

static mpfr_t r5320892, r5320893, r5320894, r5320895, r5320896, r5320897, r5320898, r5320899, r5320900, r5320901, r5320902, r5320903, r5320904, r5320905, r5320906, r5320907, r5320908, r5320909, r5320910, r5320911, r5320912, r5320913, r5320914, r5320915, r5320916;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320892);
        mpfr_init_set_str(r5320893, "-7.621017336353511e-15", 10, MPFR_RNDN);
        mpfr_init(r5320894);
        mpfr_init(r5320895);
        mpfr_init(r5320896);
        mpfr_init_set_str(r5320897, "1", 10, MPFR_RNDN);
        mpfr_init(r5320898);
        mpfr_init(r5320899);
        mpfr_init(r5320900);
        mpfr_init(r5320901);
        mpfr_init_set_str(r5320902, "3.265136463998974e-32", 10, MPFR_RNDN);
        mpfr_init(r5320903);
        mpfr_init_set_str(r5320904, "1/24", 10, MPFR_RNDN);
        mpfr_init(r5320905);
        mpfr_init(r5320906);
        mpfr_init_set_str(r5320907, "5", 10, MPFR_RNDN);
        mpfr_init(r5320908);
        mpfr_init_set_str(r5320909, "1/240", 10, MPFR_RNDN);
        mpfr_init(r5320910);
        mpfr_init_set_str(r5320911, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5320912);
        mpfr_init(r5320913);
        mpfr_init(r5320914);
        mpfr_init(r5320915);
        mpfr_init(r5320916);
}

double f_dm(double x) {
        mpfr_set_d(r5320892, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5320894, mpfr_cmp(r5320892, r5320893) <= 0, MPFR_RNDN);
        mpfr_sin(r5320895, r5320892, MPFR_RNDN);
        mpfr_mul(r5320896, r5320895, r5320895, MPFR_RNDN);
        ;
        mpfr_cos(r5320898, r5320892, MPFR_RNDN);
        mpfr_add(r5320899, r5320897, r5320898, MPFR_RNDN);
        mpfr_div(r5320900, r5320896, r5320899, MPFR_RNDN);
        mpfr_div(r5320901, r5320900, r5320895, MPFR_RNDN);
        ;
        mpfr_set_si(r5320903, mpfr_cmp(r5320892, r5320902) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5320905, r5320892, r5320892, MPFR_RNDN); mpfr_mul(r5320905, r5320905, r5320892, MPFR_RNDN);
        mpfr_mul(r5320906, r5320904, r5320905, MPFR_RNDN);
        ;
        mpfr_pow(r5320908, r5320892, r5320907, MPFR_RNDN);
        ;
        mpfr_mul(r5320910, r5320908, r5320909, MPFR_RNDN);
        ;
        mpfr_mul(r5320912, r5320892, r5320911, MPFR_RNDN);
        mpfr_add(r5320913, r5320910, r5320912, MPFR_RNDN);
        mpfr_add(r5320914, r5320906, r5320913, MPFR_RNDN);
        if (mpfr_get_si(r5320903, MPFR_RNDN)) { mpfr_set(r5320915, r5320914, MPFR_RNDN); } else { mpfr_set(r5320915, r5320901, MPFR_RNDN); };
        if (mpfr_get_si(r5320894, MPFR_RNDN)) { mpfr_set(r5320916, r5320901, MPFR_RNDN); } else { mpfr_set(r5320916, r5320915, MPFR_RNDN); };
        return mpfr_get_d(r5320916, MPFR_RNDN);
}

