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

char *name = "Expression, p6";

double f_if(float a, float b, float c, float d) {
        float r50848 = a;
        float r50849 = b;
        float r50850 = c;
        float r50851 = d;
        float r50852 = r50850 + r50851;
        float r50853 = r50849 + r50852;
        float r50854 = r50848 + r50853;
        float r50855 = 2;
        float r50856 = r50854 * r50855;
        return r50856;
}

double f_id(double a, double b, double c, double d) {
        double r50857 = a;
        double r50858 = b;
        double r50859 = c;
        double r50860 = d;
        double r50861 = r50859 + r50860;
        double r50862 = r50858 + r50861;
        double r50863 = r50857 + r50862;
        double r50864 = 2;
        double r50865 = r50863 * r50864;
        return r50865;
}


double f_of(float a, float b, float c, float d) {
        float r50866 = a;
        float r50867 = b;
        float r50868 = c;
        float r50869 = r50867 + r50868;
        float r50870 = d;
        float r50871 = r50869 + r50870;
        float r50872 = r50866 + r50871;
        float r50873 = 2;
        float r50874 = r50872 * r50873;
        return r50874;
}

double f_od(double a, double b, double c, double d) {
        double r50875 = a;
        double r50876 = b;
        double r50877 = c;
        double r50878 = r50876 + r50877;
        double r50879 = d;
        double r50880 = r50878 + r50879;
        double r50881 = r50875 + r50880;
        double r50882 = 2;
        double r50883 = r50881 * r50882;
        return r50883;
}

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 r50884, r50885, r50886, r50887, r50888, r50889, r50890, r50891, r50892;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50884);
        mpfr_init(r50885);
        mpfr_init(r50886);
        mpfr_init(r50887);
        mpfr_init(r50888);
        mpfr_init(r50889);
        mpfr_init(r50890);
        mpfr_init_set_str(r50891, "2", 10, MPFR_RNDN);
        mpfr_init(r50892);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r50884, a, MPFR_RNDN);
        mpfr_set_d(r50885, b, MPFR_RNDN);
        mpfr_set_d(r50886, c, MPFR_RNDN);
        mpfr_set_d(r50887, d, MPFR_RNDN);
        mpfr_add(r50888, r50886, r50887, MPFR_RNDN);
        mpfr_add(r50889, r50885, r50888, MPFR_RNDN);
        mpfr_add(r50890, r50884, r50889, MPFR_RNDN);
        ;
        mpfr_mul(r50892, r50890, r50891, MPFR_RNDN);
        return mpfr_get_d(r50892, MPFR_RNDN);
}

static mpfr_t r50893, r50894, r50895, r50896, r50897, r50898, r50899, r50900, r50901;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50893);
        mpfr_init(r50894);
        mpfr_init(r50895);
        mpfr_init(r50896);
        mpfr_init(r50897);
        mpfr_init(r50898);
        mpfr_init(r50899);
        mpfr_init_set_str(r50900, "2", 10, MPFR_RNDN);
        mpfr_init(r50901);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r50893, a, MPFR_RNDN);
        mpfr_set_d(r50894, b, MPFR_RNDN);
        mpfr_set_d(r50895, c, MPFR_RNDN);
        mpfr_add(r50896, r50894, r50895, MPFR_RNDN);
        mpfr_set_d(r50897, d, MPFR_RNDN);
        mpfr_add(r50898, r50896, r50897, MPFR_RNDN);
        mpfr_add(r50899, r50893, r50898, MPFR_RNDN);
        ;
        mpfr_mul(r50901, r50899, r50900, MPFR_RNDN);
        return mpfr_get_d(r50901, MPFR_RNDN);
}

static mpfr_t r50902, r50903, r50904, r50905, r50906, r50907, r50908, r50909, r50910;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50902);
        mpfr_init(r50903);
        mpfr_init(r50904);
        mpfr_init(r50905);
        mpfr_init(r50906);
        mpfr_init(r50907);
        mpfr_init(r50908);
        mpfr_init_set_str(r50909, "2", 10, MPFR_RNDN);
        mpfr_init(r50910);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r50902, a, MPFR_RNDN);
        mpfr_set_d(r50903, b, MPFR_RNDN);
        mpfr_set_d(r50904, c, MPFR_RNDN);
        mpfr_add(r50905, r50903, r50904, MPFR_RNDN);
        mpfr_set_d(r50906, d, MPFR_RNDN);
        mpfr_add(r50907, r50905, r50906, MPFR_RNDN);
        mpfr_add(r50908, r50902, r50907, MPFR_RNDN);
        ;
        mpfr_mul(r50910, r50908, r50909, MPFR_RNDN);
        return mpfr_get_d(r50910, MPFR_RNDN);
}

