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

char *name = "Crypto.Random.Test:calculate from crypto-random-0.0.9";

double f_if(float x, float y, float z) {
        float r57854 = x;
        float r57855 = y;
        float r57856 = r57855 * r57855;
        float r57857 = z;
        float r57858 = r57856 / r57857;
        float r57859 = r57854 + r57858;
        return r57859;
}

double f_id(double x, double y, double z) {
        double r57860 = x;
        double r57861 = y;
        double r57862 = r57861 * r57861;
        double r57863 = z;
        double r57864 = r57862 / r57863;
        double r57865 = r57860 + r57864;
        return r57865;
}


double f_of(float x, float y, float z) {
        float r57866 = x;
        float r57867 = y;
        float r57868 = z;
        float r57869 = r57868 / r57867;
        float r57870 = r57867 / r57869;
        float r57871 = r57866 + r57870;
        return r57871;
}

double f_od(double x, double y, double z) {
        double r57872 = x;
        double r57873 = y;
        double r57874 = z;
        double r57875 = r57874 / r57873;
        double r57876 = r57873 / r57875;
        double r57877 = r57872 + r57876;
        return r57877;
}

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 r57878, r57879, r57880, r57881, r57882, r57883;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57878);
        mpfr_init(r57879);
        mpfr_init(r57880);
        mpfr_init(r57881);
        mpfr_init(r57882);
        mpfr_init(r57883);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r57878, x, MPFR_RNDN);
        mpfr_set_d(r57879, y, MPFR_RNDN);
        mpfr_mul(r57880, r57879, r57879, MPFR_RNDN);
        mpfr_set_d(r57881, z, MPFR_RNDN);
        mpfr_div(r57882, r57880, r57881, MPFR_RNDN);
        mpfr_add(r57883, r57878, r57882, MPFR_RNDN);
        return mpfr_get_d(r57883, MPFR_RNDN);
}

static mpfr_t r57884, r57885, r57886, r57887, r57888, r57889;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57884);
        mpfr_init(r57885);
        mpfr_init(r57886);
        mpfr_init(r57887);
        mpfr_init(r57888);
        mpfr_init(r57889);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r57884, x, MPFR_RNDN);
        mpfr_set_d(r57885, y, MPFR_RNDN);
        mpfr_set_d(r57886, z, MPFR_RNDN);
        mpfr_div(r57887, r57886, r57885, MPFR_RNDN);
        mpfr_div(r57888, r57885, r57887, MPFR_RNDN);
        mpfr_add(r57889, r57884, r57888, MPFR_RNDN);
        return mpfr_get_d(r57889, MPFR_RNDN);
}

static mpfr_t r57890, r57891, r57892, r57893, r57894, r57895;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57890);
        mpfr_init(r57891);
        mpfr_init(r57892);
        mpfr_init(r57893);
        mpfr_init(r57894);
        mpfr_init(r57895);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r57890, x, MPFR_RNDN);
        mpfr_set_d(r57891, y, MPFR_RNDN);
        mpfr_set_d(r57892, z, MPFR_RNDN);
        mpfr_div(r57893, r57892, r57891, MPFR_RNDN);
        mpfr_div(r57894, r57891, r57893, MPFR_RNDN);
        mpfr_add(r57895, r57890, r57894, MPFR_RNDN);
        return mpfr_get_d(r57895, MPFR_RNDN);
}

