#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 r27375 = a1;
        float r27376 = a2;
        float r27377 = r27375 * r27376;
        float r27378 = b1;
        float r27379 = b2;
        float r27380 = r27378 * r27379;
        float r27381 = r27377 / r27380;
        return r27381;
}

double f_id(double a1, double a2, double b1, double b2) {
        double r27382 = a1;
        double r27383 = a2;
        double r27384 = r27382 * r27383;
        double r27385 = b1;
        double r27386 = b2;
        double r27387 = r27385 * r27386;
        double r27388 = r27384 / r27387;
        return r27388;
}


double f_of(float a1, float a2, float b1, float b2) {
        float r27389 = a1;
        float r27390 = b1;
        float r27391 = a2;
        float r27392 = b2;
        float r27393 = r27391 / r27392;
        float r27394 = r27390 / r27393;
        float r27395 = r27389 / r27394;
        float r27396 = -2.9030708056972143e+302;
        bool r27397 = r27395 <= r27396;
        float r27398 = 1;
        float r27399 = r27390 * r27392;
        float r27400 = r27389 * r27391;
        float r27401 = r27399 / r27400;
        float r27402 = r27398 / r27401;
        float r27403 = -2.4927215504307683e-304;
        bool r27404 = r27395 <= r27403;
        float r27405 = 1.544055853131726e-299;
        bool r27406 = r27395 <= r27405;
        float r27407 = r27400 / r27390;
        float r27408 = r27407 / r27392;
        float r27409 = 9.873510957046396e+303;
        bool r27410 = r27395 <= r27409;
        float r27411 = r27390 / r27391;
        float r27412 = r27389 / r27411;
        float r27413 = r27412 / r27392;
        float r27414 = r27410 ? r27395 : r27413;
        float r27415 = r27406 ? r27408 : r27414;
        float r27416 = r27404 ? r27395 : r27415;
        float r27417 = r27397 ? r27402 : r27416;
        return r27417;
}

double f_od(double a1, double a2, double b1, double b2) {
        double r27418 = a1;
        double r27419 = b1;
        double r27420 = a2;
        double r27421 = b2;
        double r27422 = r27420 / r27421;
        double r27423 = r27419 / r27422;
        double r27424 = r27418 / r27423;
        double r27425 = -2.9030708056972143e+302;
        bool r27426 = r27424 <= r27425;
        double r27427 = 1;
        double r27428 = r27419 * r27421;
        double r27429 = r27418 * r27420;
        double r27430 = r27428 / r27429;
        double r27431 = r27427 / r27430;
        double r27432 = -2.4927215504307683e-304;
        bool r27433 = r27424 <= r27432;
        double r27434 = 1.544055853131726e-299;
        bool r27435 = r27424 <= r27434;
        double r27436 = r27429 / r27419;
        double r27437 = r27436 / r27421;
        double r27438 = 9.873510957046396e+303;
        bool r27439 = r27424 <= r27438;
        double r27440 = r27419 / r27420;
        double r27441 = r27418 / r27440;
        double r27442 = r27441 / r27421;
        double r27443 = r27439 ? r27424 : r27442;
        double r27444 = r27435 ? r27437 : r27443;
        double r27445 = r27433 ? r27424 : r27444;
        double r27446 = r27426 ? r27431 : r27445;
        return r27446;
}

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 r27447, r27448, r27449, r27450, r27451, r27452, r27453;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r27447);
        mpfr_init(r27448);
        mpfr_init(r27449);
        mpfr_init(r27450);
        mpfr_init(r27451);
        mpfr_init(r27452);
        mpfr_init(r27453);
}

double f_im(double a1, double a2, double b1, double b2) {
        mpfr_set_d(r27447, a1, MPFR_RNDN);
        mpfr_set_d(r27448, a2, MPFR_RNDN);
        mpfr_mul(r27449, r27447, r27448, MPFR_RNDN);
        mpfr_set_d(r27450, b1, MPFR_RNDN);
        mpfr_set_d(r27451, b2, MPFR_RNDN);
        mpfr_mul(r27452, r27450, r27451, MPFR_RNDN);
        mpfr_div(r27453, r27449, r27452, MPFR_RNDN);
        return mpfr_get_d(r27453, MPFR_RNDN);
}

static mpfr_t r27454, r27455, r27456, r27457, r27458, r27459, r27460, r27461, r27462, r27463, r27464, r27465, r27466, r27467, r27468, r27469, r27470, r27471, r27472, r27473, r27474, r27475, r27476, r27477, r27478, r27479, r27480, r27481, r27482;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27454);
        mpfr_init(r27455);
        mpfr_init(r27456);
        mpfr_init(r27457);
        mpfr_init(r27458);
        mpfr_init(r27459);
        mpfr_init(r27460);
        mpfr_init_set_str(r27461, "-2.9030708056972143e+302", 10, MPFR_RNDN);
        mpfr_init(r27462);
        mpfr_init_set_str(r27463, "1", 10, MPFR_RNDN);
        mpfr_init(r27464);
        mpfr_init(r27465);
        mpfr_init(r27466);
        mpfr_init(r27467);
        mpfr_init_set_str(r27468, "-2.4927215504307683e-304", 10, MPFR_RNDN);
        mpfr_init(r27469);
        mpfr_init_set_str(r27470, "1.544055853131726e-299", 10, MPFR_RNDN);
        mpfr_init(r27471);
        mpfr_init(r27472);
        mpfr_init(r27473);
        mpfr_init_set_str(r27474, "9.873510957046396e+303", 10, MPFR_RNDN);
        mpfr_init(r27475);
        mpfr_init(r27476);
        mpfr_init(r27477);
        mpfr_init(r27478);
        mpfr_init(r27479);
        mpfr_init(r27480);
        mpfr_init(r27481);
        mpfr_init(r27482);
}

double f_fm(double a1, double a2, double b1, double b2) {
        mpfr_set_d(r27454, a1, MPFR_RNDN);
        mpfr_set_d(r27455, b1, MPFR_RNDN);
        mpfr_set_d(r27456, a2, MPFR_RNDN);
        mpfr_set_d(r27457, b2, MPFR_RNDN);
        mpfr_div(r27458, r27456, r27457, MPFR_RNDN);
        mpfr_div(r27459, r27455, r27458, MPFR_RNDN);
        mpfr_div(r27460, r27454, r27459, MPFR_RNDN);
        ;
        mpfr_set_si(r27462, mpfr_cmp(r27460, r27461) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27464, r27455, r27457, MPFR_RNDN);
        mpfr_mul(r27465, r27454, r27456, MPFR_RNDN);
        mpfr_div(r27466, r27464, r27465, MPFR_RNDN);
        mpfr_div(r27467, r27463, r27466, MPFR_RNDN);
        ;
        mpfr_set_si(r27469, mpfr_cmp(r27460, r27468) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27471, mpfr_cmp(r27460, r27470) <= 0, MPFR_RNDN);
        mpfr_div(r27472, r27465, r27455, MPFR_RNDN);
        mpfr_div(r27473, r27472, r27457, MPFR_RNDN);
        ;
        mpfr_set_si(r27475, mpfr_cmp(r27460, r27474) <= 0, MPFR_RNDN);
        mpfr_div(r27476, r27455, r27456, MPFR_RNDN);
        mpfr_div(r27477, r27454, r27476, MPFR_RNDN);
        mpfr_div(r27478, r27477, r27457, MPFR_RNDN);
        if (mpfr_get_si(r27475, MPFR_RNDN)) { mpfr_set(r27479, r27460, MPFR_RNDN); } else { mpfr_set(r27479, r27478, MPFR_RNDN); };
        if (mpfr_get_si(r27471, MPFR_RNDN)) { mpfr_set(r27480, r27473, MPFR_RNDN); } else { mpfr_set(r27480, r27479, MPFR_RNDN); };
        if (mpfr_get_si(r27469, MPFR_RNDN)) { mpfr_set(r27481, r27460, MPFR_RNDN); } else { mpfr_set(r27481, r27480, MPFR_RNDN); };
        if (mpfr_get_si(r27462, MPFR_RNDN)) { mpfr_set(r27482, r27467, MPFR_RNDN); } else { mpfr_set(r27482, r27481, MPFR_RNDN); };
        return mpfr_get_d(r27482, MPFR_RNDN);
}

static mpfr_t r27483, r27484, r27485, r27486, r27487, r27488, r27489, r27490, r27491, r27492, r27493, r27494, r27495, r27496, r27497, r27498, r27499, r27500, r27501, r27502, r27503, r27504, r27505, r27506, r27507, r27508, r27509, r27510, r27511;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27483);
        mpfr_init(r27484);
        mpfr_init(r27485);
        mpfr_init(r27486);
        mpfr_init(r27487);
        mpfr_init(r27488);
        mpfr_init(r27489);
        mpfr_init_set_str(r27490, "-2.9030708056972143e+302", 10, MPFR_RNDN);
        mpfr_init(r27491);
        mpfr_init_set_str(r27492, "1", 10, MPFR_RNDN);
        mpfr_init(r27493);
        mpfr_init(r27494);
        mpfr_init(r27495);
        mpfr_init(r27496);
        mpfr_init_set_str(r27497, "-2.4927215504307683e-304", 10, MPFR_RNDN);
        mpfr_init(r27498);
        mpfr_init_set_str(r27499, "1.544055853131726e-299", 10, MPFR_RNDN);
        mpfr_init(r27500);
        mpfr_init(r27501);
        mpfr_init(r27502);
        mpfr_init_set_str(r27503, "9.873510957046396e+303", 10, MPFR_RNDN);
        mpfr_init(r27504);
        mpfr_init(r27505);
        mpfr_init(r27506);
        mpfr_init(r27507);
        mpfr_init(r27508);
        mpfr_init(r27509);
        mpfr_init(r27510);
        mpfr_init(r27511);
}

double f_dm(double a1, double a2, double b1, double b2) {
        mpfr_set_d(r27483, a1, MPFR_RNDN);
        mpfr_set_d(r27484, b1, MPFR_RNDN);
        mpfr_set_d(r27485, a2, MPFR_RNDN);
        mpfr_set_d(r27486, b2, MPFR_RNDN);
        mpfr_div(r27487, r27485, r27486, MPFR_RNDN);
        mpfr_div(r27488, r27484, r27487, MPFR_RNDN);
        mpfr_div(r27489, r27483, r27488, MPFR_RNDN);
        ;
        mpfr_set_si(r27491, mpfr_cmp(r27489, r27490) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27493, r27484, r27486, MPFR_RNDN);
        mpfr_mul(r27494, r27483, r27485, MPFR_RNDN);
        mpfr_div(r27495, r27493, r27494, MPFR_RNDN);
        mpfr_div(r27496, r27492, r27495, MPFR_RNDN);
        ;
        mpfr_set_si(r27498, mpfr_cmp(r27489, r27497) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27500, mpfr_cmp(r27489, r27499) <= 0, MPFR_RNDN);
        mpfr_div(r27501, r27494, r27484, MPFR_RNDN);
        mpfr_div(r27502, r27501, r27486, MPFR_RNDN);
        ;
        mpfr_set_si(r27504, mpfr_cmp(r27489, r27503) <= 0, MPFR_RNDN);
        mpfr_div(r27505, r27484, r27485, MPFR_RNDN);
        mpfr_div(r27506, r27483, r27505, MPFR_RNDN);
        mpfr_div(r27507, r27506, r27486, MPFR_RNDN);
        if (mpfr_get_si(r27504, MPFR_RNDN)) { mpfr_set(r27508, r27489, MPFR_RNDN); } else { mpfr_set(r27508, r27507, MPFR_RNDN); };
        if (mpfr_get_si(r27500, MPFR_RNDN)) { mpfr_set(r27509, r27502, MPFR_RNDN); } else { mpfr_set(r27509, r27508, MPFR_RNDN); };
        if (mpfr_get_si(r27498, MPFR_RNDN)) { mpfr_set(r27510, r27489, MPFR_RNDN); } else { mpfr_set(r27510, r27509, MPFR_RNDN); };
        if (mpfr_get_si(r27491, MPFR_RNDN)) { mpfr_set(r27511, r27496, MPFR_RNDN); } else { mpfr_set(r27511, r27510, MPFR_RNDN); };
        return mpfr_get_d(r27511, MPFR_RNDN);
}

