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

char *name = "logs (example 3.8)";

double f_if(float n) {
        float r9904 = n;
        float r9905 = 1.0f;
        float r9906 = r9904 + r9905;
        float r9907 = log(r9906);
        float r9908 = r9906 * r9907;
        float r9909 = log(r9904);
        float r9910 = r9904 * r9909;
        float r9911 = r9908 - r9910;
        float r9912 = r9911 - r9905;
        return r9912;
}

double f_id(double n) {
        double r9913 = n;
        double r9914 = 1.0;
        double r9915 = r9913 + r9914;
        double r9916 = log(r9915);
        double r9917 = r9915 * r9916;
        double r9918 = log(r9913);
        double r9919 = r9913 * r9918;
        double r9920 = r9917 - r9919;
        double r9921 = r9920 - r9914;
        return r9921;
}


double f_of(float n) {
        float r9922 = n;
        float r9923 = log(r9922);
        float r9924 = 0.5f;
        float r9925 = r9924 / r9922;
        float r9926 = r9923 + r9925;
        float r9927 = 0.16666666666666666f;
        float r9928 = r9922 * r9922;
        float r9929 = r9927 / r9928;
        float r9930 = r9926 - r9929;
        return r9930;
}

double f_od(double n) {
        double r9931 = n;
        double r9932 = log(r9931);
        double r9933 = 0.5;
        double r9934 = r9933 / r9931;
        double r9935 = r9932 + r9934;
        double r9936 = 0.16666666666666666;
        double r9937 = r9931 * r9931;
        double r9938 = r9936 / r9937;
        double r9939 = r9935 - r9938;
        return r9939;
}

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 r9940, r9941, r9942, r9943, r9944, r9945, r9946, r9947, r9948;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9940);
        mpfr_init_set_str(r9941, "1", 10, MPFR_RNDN);
        mpfr_init(r9942);
        mpfr_init(r9943);
        mpfr_init(r9944);
        mpfr_init(r9945);
        mpfr_init(r9946);
        mpfr_init(r9947);
        mpfr_init(r9948);
}

double f_im(double n) {
        mpfr_set_d(r9940, n, MPFR_RNDN);
        ;
        mpfr_add(r9942, r9940, r9941, MPFR_RNDN);
        mpfr_log(r9943, r9942, MPFR_RNDN);
        mpfr_mul(r9944, r9942, r9943, MPFR_RNDN);
        mpfr_log(r9945, r9940, MPFR_RNDN);
        mpfr_mul(r9946, r9940, r9945, MPFR_RNDN);
        mpfr_sub(r9947, r9944, r9946, MPFR_RNDN);
        mpfr_sub(r9948, r9947, r9941, MPFR_RNDN);
        return mpfr_get_d(r9948, MPFR_RNDN);
}

static mpfr_t r9949, r9950, r9951, r9952, r9953, r9954, r9955, r9956, r9957;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9949);
        mpfr_init(r9950);
        mpfr_init_set_str(r9951, "1/2", 10, MPFR_RNDN);
        mpfr_init(r9952);
        mpfr_init(r9953);
        mpfr_init_set_str(r9954, "1/6", 10, MPFR_RNDN);
        mpfr_init(r9955);
        mpfr_init(r9956);
        mpfr_init(r9957);
}

double f_fm(double n) {
        mpfr_set_d(r9949, n, MPFR_RNDN);
        mpfr_log(r9950, r9949, MPFR_RNDN);
        ;
        mpfr_div(r9952, r9951, r9949, MPFR_RNDN);
        mpfr_add(r9953, r9950, r9952, MPFR_RNDN);
        ;
        mpfr_mul(r9955, r9949, r9949, MPFR_RNDN);
        mpfr_div(r9956, r9954, r9955, MPFR_RNDN);
        mpfr_sub(r9957, r9953, r9956, MPFR_RNDN);
        return mpfr_get_d(r9957, MPFR_RNDN);
}

static mpfr_t r9958, r9959, r9960, r9961, r9962, r9963, r9964, r9965, r9966;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9958);
        mpfr_init(r9959);
        mpfr_init_set_str(r9960, "1/2", 10, MPFR_RNDN);
        mpfr_init(r9961);
        mpfr_init(r9962);
        mpfr_init_set_str(r9963, "1/6", 10, MPFR_RNDN);
        mpfr_init(r9964);
        mpfr_init(r9965);
        mpfr_init(r9966);
}

double f_dm(double n) {
        mpfr_set_d(r9958, n, MPFR_RNDN);
        mpfr_log(r9959, r9958, MPFR_RNDN);
        ;
        mpfr_div(r9961, r9960, r9958, MPFR_RNDN);
        mpfr_add(r9962, r9959, r9961, MPFR_RNDN);
        ;
        mpfr_mul(r9964, r9958, r9958, MPFR_RNDN);
        mpfr_div(r9965, r9963, r9964, MPFR_RNDN);
        mpfr_sub(r9966, r9962, r9965, MPFR_RNDN);
        return mpfr_get_d(r9966, MPFR_RNDN);
}

