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

char *name = "Octave 3.8, oct_fill_randg";

double f_if(float a, float rand) {
        float r8945 = a;
        float r8946 = 1.0f;
        float r8947 = 3.0f;
        float r8948 = r8946 / r8947;
        float r8949 = r8945 - r8948;
        float r8950 = 1.0f;
        float r8951 = 9.0f;
        float r8952 = r8951 * r8949;
        float r8953 = sqrt(r8952);
        float r8954 = r8950 / r8953;
        float r8955 = rand;
        float r8956 = r8954 * r8955;
        float r8957 = r8950 + r8956;
        float r8958 = r8949 * r8957;
        return r8958;
}

double f_id(double a, double rand) {
        double r8959 = a;
        double r8960 = 1.0;
        double r8961 = 3.0;
        double r8962 = r8960 / r8961;
        double r8963 = r8959 - r8962;
        double r8964 = 1.0;
        double r8965 = 9.0;
        double r8966 = r8965 * r8963;
        double r8967 = sqrt(r8966);
        double r8968 = r8964 / r8967;
        double r8969 = rand;
        double r8970 = r8968 * r8969;
        double r8971 = r8964 + r8970;
        double r8972 = r8963 * r8971;
        return r8972;
}


double f_of(float a, float rand) {
        float r8973 = rand;
        float r8974 = a;
        float r8975 = 1.0f;
        float r8976 = 3.0f;
        float r8977 = r8975 / r8976;
        float r8978 = r8974 - r8977;
        float r8979 = 9.0f;
        float r8980 = r8978 / r8979;
        float r8981 = sqrt(r8980);
        float r8982 = fma(r8973, r8981, r8978);
        return r8982;
}

double f_od(double a, double rand) {
        double r8983 = rand;
        double r8984 = a;
        double r8985 = 1.0;
        double r8986 = 3.0;
        double r8987 = r8985 / r8986;
        double r8988 = r8984 - r8987;
        double r8989 = 9.0;
        double r8990 = r8988 / r8989;
        double r8991 = sqrt(r8990);
        double r8992 = fma(r8983, r8991, r8988);
        return r8992;
}

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 r8993, r8994, r8995, r8996, r8997, r8998, r8999, r9000, r9001, r9002, r9003, r9004, r9005, r9006;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8993);
        mpfr_init_set_str(r8994, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r8995, "3.0", 10, MPFR_RNDN);
        mpfr_init(r8996);
        mpfr_init(r8997);
        mpfr_init_set_str(r8998, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8999, "9", 10, MPFR_RNDN);
        mpfr_init(r9000);
        mpfr_init(r9001);
        mpfr_init(r9002);
        mpfr_init(r9003);
        mpfr_init(r9004);
        mpfr_init(r9005);
        mpfr_init(r9006);
}

double f_im(double a, double rand) {
        mpfr_set_d(r8993, a, MPFR_RNDN);
        ;
        ;
        mpfr_div(r8996, r8994, r8995, MPFR_RNDN);
        mpfr_sub(r8997, r8993, r8996, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r9000, r8999, r8997, MPFR_RNDN);
        mpfr_sqrt(r9001, r9000, MPFR_RNDN);
        mpfr_div(r9002, r8998, r9001, MPFR_RNDN);
        mpfr_set_d(r9003, rand, MPFR_RNDN);
        mpfr_mul(r9004, r9002, r9003, MPFR_RNDN);
        mpfr_add(r9005, r8998, r9004, MPFR_RNDN);
        mpfr_mul(r9006, r8997, r9005, MPFR_RNDN);
        return mpfr_get_d(r9006, MPFR_RNDN);
}

static mpfr_t r9007, r9008, r9009, r9010, r9011, r9012, r9013, r9014, r9015, r9016;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9007);
        mpfr_init(r9008);
        mpfr_init_set_str(r9009, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r9010, "3.0", 10, MPFR_RNDN);
        mpfr_init(r9011);
        mpfr_init(r9012);
        mpfr_init_set_str(r9013, "9", 10, MPFR_RNDN);
        mpfr_init(r9014);
        mpfr_init(r9015);
        mpfr_init(r9016);
}

double f_fm(double a, double rand) {
        mpfr_set_d(r9007, rand, MPFR_RNDN);
        mpfr_set_d(r9008, a, MPFR_RNDN);
        ;
        ;
        mpfr_div(r9011, r9009, r9010, MPFR_RNDN);
        mpfr_sub(r9012, r9008, r9011, MPFR_RNDN);
        ;
        mpfr_div(r9014, r9012, r9013, MPFR_RNDN);
        mpfr_sqrt(r9015, r9014, MPFR_RNDN);
        mpfr_fma(r9016, r9007, r9015, r9012, MPFR_RNDN);
        return mpfr_get_d(r9016, MPFR_RNDN);
}

static mpfr_t r9017, r9018, r9019, r9020, r9021, r9022, r9023, r9024, r9025, r9026;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init(r9017);
        mpfr_init(r9018);
        mpfr_init_set_str(r9019, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r9020, "3.0", 10, MPFR_RNDN);
        mpfr_init(r9021);
        mpfr_init(r9022);
        mpfr_init_set_str(r9023, "9", 10, MPFR_RNDN);
        mpfr_init(r9024);
        mpfr_init(r9025);
        mpfr_init(r9026);
}

double f_dm(double a, double rand) {
        mpfr_set_d(r9017, rand, MPFR_RNDN);
        mpfr_set_d(r9018, a, MPFR_RNDN);
        ;
        ;
        mpfr_div(r9021, r9019, r9020, MPFR_RNDN);
        mpfr_sub(r9022, r9018, r9021, MPFR_RNDN);
        ;
        mpfr_div(r9024, r9022, r9023, MPFR_RNDN);
        mpfr_sqrt(r9025, r9024, MPFR_RNDN);
        mpfr_fma(r9026, r9017, r9025, r9022, MPFR_RNDN);
        return mpfr_get_d(r9026, MPFR_RNDN);
}

