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

char *name = "Quotient of products";

double f_if(float a1, float a2, float b1, float b2) {
        float r37557 = a1;
        float r37558 = a2;
        float r37559 = r37557 * r37558;
        float r37560 = b1;
        float r37561 = b2;
        float r37562 = r37560 * r37561;
        float r37563 = r37559 / r37562;
        return r37563;
}

double f_id(double a1, double a2, double b1, double b2) {
        double r37564 = a1;
        double r37565 = a2;
        double r37566 = r37564 * r37565;
        double r37567 = b1;
        double r37568 = b2;
        double r37569 = r37567 * r37568;
        double r37570 = r37566 / r37569;
        return r37570;
}


double f_of(float a1, float a2, float b1, float b2) {
        float r37571 = a1;
        float r37572 = a2;
        float r37573 = r37571 * r37572;
        float r37574 = b1;
        float r37575 = b2;
        float r37576 = r37574 * r37575;
        float r37577 = r37573 / r37576;
        float r37578 = -4.333068901791902e-282f;
        bool r37579 = r37577 <= r37578;
        float r37580 = 1.0f;
        float r37581 = r37580 / r37576;
        float r37582 = r37573 * r37581;
        float r37583 = -0.0f;
        bool r37584 = r37577 <= r37583;
        float r37585 = r37571 / r37574;
        float r37586 = r37572 / r37575;
        float r37587 = r37585 * r37586;
        float r37588 = 2.451390768683476e-38f;
        bool r37589 = r37577 <= r37588;
        float r37590 = r37589 ? r37582 : r37587;
        float r37591 = r37584 ? r37587 : r37590;
        float r37592 = r37579 ? r37582 : r37591;
        return r37592;
}

double f_od(double a1, double a2, double b1, double b2) {
        double r37593 = a1;
        double r37594 = a2;
        double r37595 = r37593 * r37594;
        double r37596 = b1;
        double r37597 = b2;
        double r37598 = r37596 * r37597;
        double r37599 = r37595 / r37598;
        double r37600 = -4.333068901791902e-282;
        bool r37601 = r37599 <= r37600;
        double r37602 = 1.0;
        double r37603 = r37602 / r37598;
        double r37604 = r37595 * r37603;
        double r37605 = -0.0;
        bool r37606 = r37599 <= r37605;
        double r37607 = r37593 / r37596;
        double r37608 = r37594 / r37597;
        double r37609 = r37607 * r37608;
        double r37610 = 2.451390768683476e-38;
        bool r37611 = r37599 <= r37610;
        double r37612 = r37611 ? r37604 : r37609;
        double r37613 = r37606 ? r37609 : r37612;
        double r37614 = r37601 ? r37604 : r37613;
        return r37614;
}

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 r37615, r37616, r37617, r37618, r37619, r37620, r37621;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r37615);
        mpfr_init(r37616);
        mpfr_init(r37617);
        mpfr_init(r37618);
        mpfr_init(r37619);
        mpfr_init(r37620);
        mpfr_init(r37621);
}

double f_im(double a1, double a2, double b1, double b2) {
        mpfr_set_d(r37615, a1, MPFR_RNDN);
        mpfr_set_d(r37616, a2, MPFR_RNDN);
        mpfr_mul(r37617, r37615, r37616, MPFR_RNDN);
        mpfr_set_d(r37618, b1, MPFR_RNDN);
        mpfr_set_d(r37619, b2, MPFR_RNDN);
        mpfr_mul(r37620, r37618, r37619, MPFR_RNDN);
        mpfr_div(r37621, r37617, r37620, MPFR_RNDN);
        return mpfr_get_d(r37621, MPFR_RNDN);
}

static mpfr_t r37622, r37623, r37624, r37625, r37626, r37627, r37628, r37629, r37630, r37631, r37632, r37633, r37634, r37635, r37636, r37637, r37638, r37639, r37640, r37641, r37642, r37643;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r37622);
        mpfr_init(r37623);
        mpfr_init(r37624);
        mpfr_init(r37625);
        mpfr_init(r37626);
        mpfr_init(r37627);
        mpfr_init(r37628);
        mpfr_init_set_str(r37629, "-4.333068901791902e-282", 10, MPFR_RNDN);
        mpfr_init(r37630);
        mpfr_init_set_str(r37631, "1", 10, MPFR_RNDN);
        mpfr_init(r37632);
        mpfr_init(r37633);
        mpfr_init_set_str(r37634, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r37635);
        mpfr_init(r37636);
        mpfr_init(r37637);
        mpfr_init(r37638);
        mpfr_init_set_str(r37639, "2.451390768683476e-38", 10, MPFR_RNDN);
        mpfr_init(r37640);
        mpfr_init(r37641);
        mpfr_init(r37642);
        mpfr_init(r37643);
}

double f_fm(double a1, double a2, double b1, double b2) {
        mpfr_set_d(r37622, a1, MPFR_RNDN);
        mpfr_set_d(r37623, a2, MPFR_RNDN);
        mpfr_mul(r37624, r37622, r37623, MPFR_RNDN);
        mpfr_set_d(r37625, b1, MPFR_RNDN);
        mpfr_set_d(r37626, b2, MPFR_RNDN);
        mpfr_mul(r37627, r37625, r37626, MPFR_RNDN);
        mpfr_div(r37628, r37624, r37627, MPFR_RNDN);
        ;
        mpfr_set_si(r37630, mpfr_cmp(r37628, r37629) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r37632, r37631, r37627, MPFR_RNDN);
        mpfr_mul(r37633, r37624, r37632, MPFR_RNDN);
        ;
        mpfr_set_si(r37635, mpfr_cmp(r37628, r37634) <= 0, MPFR_RNDN);
        mpfr_div(r37636, r37622, r37625, MPFR_RNDN);
        mpfr_div(r37637, r37623, r37626, MPFR_RNDN);
        mpfr_mul(r37638, r37636, r37637, MPFR_RNDN);
        ;
        mpfr_set_si(r37640, mpfr_cmp(r37628, r37639) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r37640, MPFR_RNDN)) { mpfr_set(r37641, r37633, MPFR_RNDN); } else { mpfr_set(r37641, r37638, MPFR_RNDN); };
        if (mpfr_get_si(r37635, MPFR_RNDN)) { mpfr_set(r37642, r37638, MPFR_RNDN); } else { mpfr_set(r37642, r37641, MPFR_RNDN); };
        if (mpfr_get_si(r37630, MPFR_RNDN)) { mpfr_set(r37643, r37633, MPFR_RNDN); } else { mpfr_set(r37643, r37642, MPFR_RNDN); };
        return mpfr_get_d(r37643, MPFR_RNDN);
}

static mpfr_t r37644, r37645, r37646, r37647, r37648, r37649, r37650, r37651, r37652, r37653, r37654, r37655, r37656, r37657, r37658, r37659, r37660, r37661, r37662, r37663, r37664, r37665;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r37644);
        mpfr_init(r37645);
        mpfr_init(r37646);
        mpfr_init(r37647);
        mpfr_init(r37648);
        mpfr_init(r37649);
        mpfr_init(r37650);
        mpfr_init_set_str(r37651, "-4.333068901791902e-282", 10, MPFR_RNDN);
        mpfr_init(r37652);
        mpfr_init_set_str(r37653, "1", 10, MPFR_RNDN);
        mpfr_init(r37654);
        mpfr_init(r37655);
        mpfr_init_set_str(r37656, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r37657);
        mpfr_init(r37658);
        mpfr_init(r37659);
        mpfr_init(r37660);
        mpfr_init_set_str(r37661, "2.451390768683476e-38", 10, MPFR_RNDN);
        mpfr_init(r37662);
        mpfr_init(r37663);
        mpfr_init(r37664);
        mpfr_init(r37665);
}

double f_dm(double a1, double a2, double b1, double b2) {
        mpfr_set_d(r37644, a1, MPFR_RNDN);
        mpfr_set_d(r37645, a2, MPFR_RNDN);
        mpfr_mul(r37646, r37644, r37645, MPFR_RNDN);
        mpfr_set_d(r37647, b1, MPFR_RNDN);
        mpfr_set_d(r37648, b2, MPFR_RNDN);
        mpfr_mul(r37649, r37647, r37648, MPFR_RNDN);
        mpfr_div(r37650, r37646, r37649, MPFR_RNDN);
        ;
        mpfr_set_si(r37652, mpfr_cmp(r37650, r37651) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r37654, r37653, r37649, MPFR_RNDN);
        mpfr_mul(r37655, r37646, r37654, MPFR_RNDN);
        ;
        mpfr_set_si(r37657, mpfr_cmp(r37650, r37656) <= 0, MPFR_RNDN);
        mpfr_div(r37658, r37644, r37647, MPFR_RNDN);
        mpfr_div(r37659, r37645, r37648, MPFR_RNDN);
        mpfr_mul(r37660, r37658, r37659, MPFR_RNDN);
        ;
        mpfr_set_si(r37662, mpfr_cmp(r37650, r37661) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r37662, MPFR_RNDN)) { mpfr_set(r37663, r37655, MPFR_RNDN); } else { mpfr_set(r37663, r37660, MPFR_RNDN); };
        if (mpfr_get_si(r37657, MPFR_RNDN)) { mpfr_set(r37664, r37660, MPFR_RNDN); } else { mpfr_set(r37664, r37663, MPFR_RNDN); };
        if (mpfr_get_si(r37652, MPFR_RNDN)) { mpfr_set(r37665, r37655, MPFR_RNDN); } else { mpfr_set(r37665, r37664, MPFR_RNDN); };
        return mpfr_get_d(r37665, MPFR_RNDN);
}

