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

char *name = "2log (problem 3.3.6)";

double f_if(float N) {
        float r36850 = N;
        float r36851 = 1;
        float r36852 = r36850 + r36851;
        float r36853 = log(r36852);
        float r36854 = log(r36850);
        float r36855 = r36853 - r36854;
        return r36855;
}

double f_id(double N) {
        double r36856 = N;
        double r36857 = 1;
        double r36858 = r36856 + r36857;
        double r36859 = log(r36858);
        double r36860 = log(r36856);
        double r36861 = r36859 - r36860;
        return r36861;
}


double f_of(float N) {
        float r36862 = N;
        float r36863 = 7531.5475611680995;
        bool r36864 = r36862 <= r36863;
        float r36865 = 1;
        float r36866 = r36862 + r36865;
        float r36867 = r36866 / r36862;
        float r36868 = log(r36867);
        float r36869 = r36865 / r36862;
        float r36870 = 1/3;
        float r36871 = r36870 / r36862;
        float r36872 = 1/2;
        float r36873 = r36871 - r36872;
        float r36874 = r36862 * r36862;
        float r36875 = r36873 / r36874;
        float r36876 = r36869 + r36875;
        float r36877 = r36864 ? r36868 : r36876;
        return r36877;
}

double f_od(double N) {
        double r36878 = N;
        double r36879 = 7531.5475611680995;
        bool r36880 = r36878 <= r36879;
        double r36881 = 1;
        double r36882 = r36878 + r36881;
        double r36883 = r36882 / r36878;
        double r36884 = log(r36883);
        double r36885 = r36881 / r36878;
        double r36886 = 1/3;
        double r36887 = r36886 / r36878;
        double r36888 = 1/2;
        double r36889 = r36887 - r36888;
        double r36890 = r36878 * r36878;
        double r36891 = r36889 / r36890;
        double r36892 = r36885 + r36891;
        double r36893 = r36880 ? r36884 : r36892;
        return r36893;
}

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 r36894, r36895, r36896, r36897, r36898, r36899;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36894);
        mpfr_init_set_str(r36895, "1", 10, MPFR_RNDN);
        mpfr_init(r36896);
        mpfr_init(r36897);
        mpfr_init(r36898);
        mpfr_init(r36899);
}

double f_im(double N) {
        mpfr_set_d(r36894, N, MPFR_RNDN);
        ;
        mpfr_add(r36896, r36894, r36895, MPFR_RNDN);
        mpfr_log(r36897, r36896, MPFR_RNDN);
        mpfr_log(r36898, r36894, MPFR_RNDN);
        mpfr_sub(r36899, r36897, r36898, MPFR_RNDN);
        return mpfr_get_d(r36899, MPFR_RNDN);
}

static mpfr_t r36900, r36901, r36902, r36903, r36904, r36905, r36906, r36907, r36908, r36909, r36910, r36911, r36912, r36913, r36914, r36915;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36900);
        mpfr_init_set_str(r36901, "7531.5475611680995", 10, MPFR_RNDN);
        mpfr_init(r36902);
        mpfr_init_set_str(r36903, "1", 10, MPFR_RNDN);
        mpfr_init(r36904);
        mpfr_init(r36905);
        mpfr_init(r36906);
        mpfr_init(r36907);
        mpfr_init_set_str(r36908, "1/3", 10, MPFR_RNDN);
        mpfr_init(r36909);
        mpfr_init_set_str(r36910, "1/2", 10, MPFR_RNDN);
        mpfr_init(r36911);
        mpfr_init(r36912);
        mpfr_init(r36913);
        mpfr_init(r36914);
        mpfr_init(r36915);
}

double f_fm(double N) {
        mpfr_set_d(r36900, N, MPFR_RNDN);
        ;
        mpfr_set_si(r36902, mpfr_cmp(r36900, r36901) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r36904, r36900, r36903, MPFR_RNDN);
        mpfr_div(r36905, r36904, r36900, MPFR_RNDN);
        mpfr_log(r36906, r36905, MPFR_RNDN);
        mpfr_div(r36907, r36903, r36900, MPFR_RNDN);
        ;
        mpfr_div(r36909, r36908, r36900, MPFR_RNDN);
        ;
        mpfr_sub(r36911, r36909, r36910, MPFR_RNDN);
        mpfr_mul(r36912, r36900, r36900, MPFR_RNDN);
        mpfr_div(r36913, r36911, r36912, MPFR_RNDN);
        mpfr_add(r36914, r36907, r36913, MPFR_RNDN);
        if (mpfr_get_si(r36902, MPFR_RNDN)) { mpfr_set(r36915, r36906, MPFR_RNDN); } else { mpfr_set(r36915, r36914, MPFR_RNDN); };
        return mpfr_get_d(r36915, MPFR_RNDN);
}

static mpfr_t r36916, r36917, r36918, r36919, r36920, r36921, r36922, r36923, r36924, r36925, r36926, r36927, r36928, r36929, r36930, r36931;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r36916);
        mpfr_init_set_str(r36917, "7531.5475611680995", 10, MPFR_RNDN);
        mpfr_init(r36918);
        mpfr_init_set_str(r36919, "1", 10, MPFR_RNDN);
        mpfr_init(r36920);
        mpfr_init(r36921);
        mpfr_init(r36922);
        mpfr_init(r36923);
        mpfr_init_set_str(r36924, "1/3", 10, MPFR_RNDN);
        mpfr_init(r36925);
        mpfr_init_set_str(r36926, "1/2", 10, MPFR_RNDN);
        mpfr_init(r36927);
        mpfr_init(r36928);
        mpfr_init(r36929);
        mpfr_init(r36930);
        mpfr_init(r36931);
}

double f_dm(double N) {
        mpfr_set_d(r36916, N, MPFR_RNDN);
        ;
        mpfr_set_si(r36918, mpfr_cmp(r36916, r36917) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r36920, r36916, r36919, MPFR_RNDN);
        mpfr_div(r36921, r36920, r36916, MPFR_RNDN);
        mpfr_log(r36922, r36921, MPFR_RNDN);
        mpfr_div(r36923, r36919, r36916, MPFR_RNDN);
        ;
        mpfr_div(r36925, r36924, r36916, MPFR_RNDN);
        ;
        mpfr_sub(r36927, r36925, r36926, MPFR_RNDN);
        mpfr_mul(r36928, r36916, r36916, MPFR_RNDN);
        mpfr_div(r36929, r36927, r36928, MPFR_RNDN);
        mpfr_add(r36930, r36923, r36929, MPFR_RNDN);
        if (mpfr_get_si(r36918, MPFR_RNDN)) { mpfr_set(r36931, r36922, MPFR_RNDN); } else { mpfr_set(r36931, r36930, MPFR_RNDN); };
        return mpfr_get_d(r36931, MPFR_RNDN);
}

