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

char *name = "quad2m (problem 3.2.1, negative)";

double f_if(float a, float b_2, float c) {
        float r8320 = b_2;
        float r8321 = -r8320;
        float r8322 = r8320 * r8320;
        float r8323 = a;
        float r8324 = c;
        float r8325 = r8323 * r8324;
        float r8326 = r8322 - r8325;
        float r8327 = sqrt(r8326);
        float r8328 = r8321 - r8327;
        float r8329 = r8328 / r8323;
        return r8329;
}

double f_id(double a, double b_2, double c) {
        double r8330 = b_2;
        double r8331 = -r8330;
        double r8332 = r8330 * r8330;
        double r8333 = a;
        double r8334 = c;
        double r8335 = r8333 * r8334;
        double r8336 = r8332 - r8335;
        double r8337 = sqrt(r8336);
        double r8338 = r8331 - r8337;
        double r8339 = r8338 / r8333;
        return r8339;
}


double f_of(float a, float b_2, float c) {
        float r8340 = b_2;
        float r8341 = -0.023046085366440986;
        bool r8342 = r8340 <= r8341;
        float r8343 = c;
        float r8344 = 1/2;
        float r8345 = a;
        float r8346 = r8344 * r8345;
        float r8347 = r8340 / r8343;
        float r8348 = r8346 / r8347;
        float r8349 = r8340 + r8340;
        float r8350 = r8348 - r8349;
        float r8351 = r8343 / r8350;
        float r8352 = -2.5319625255424875e-142;
        bool r8353 = r8340 <= r8352;
        float r8354 = r8340 * r8340;
        float r8355 = r8343 * r8345;
        float r8356 = r8354 - r8355;
        float r8357 = sqrt(r8356);
        float r8358 = r8357 - r8340;
        float r8359 = cbrt(r8358);
        float r8360 = r8359 * r8359;
        float r8361 = r8343 / r8360;
        float r8362 = r8345 / r8359;
        float r8363 = r8361 * r8362;
        float r8364 = r8363 / r8345;
        float r8365 = 2.2595025069381943e+39;
        bool r8366 = r8340 <= r8365;
        float r8367 = 1;
        float r8368 = -r8340;
        float r8369 = r8345 * r8343;
        float r8370 = r8354 - r8369;
        float r8371 = sqrt(r8370);
        float r8372 = r8368 - r8371;
        float r8373 = r8345 / r8372;
        float r8374 = r8367 / r8373;
        float r8375 = r8350 / r8345;
        float r8376 = r8366 ? r8374 : r8375;
        float r8377 = r8353 ? r8364 : r8376;
        float r8378 = r8342 ? r8351 : r8377;
        return r8378;
}

double f_od(double a, double b_2, double c) {
        double r8379 = b_2;
        double r8380 = -0.023046085366440986;
        bool r8381 = r8379 <= r8380;
        double r8382 = c;
        double r8383 = 1/2;
        double r8384 = a;
        double r8385 = r8383 * r8384;
        double r8386 = r8379 / r8382;
        double r8387 = r8385 / r8386;
        double r8388 = r8379 + r8379;
        double r8389 = r8387 - r8388;
        double r8390 = r8382 / r8389;
        double r8391 = -2.5319625255424875e-142;
        bool r8392 = r8379 <= r8391;
        double r8393 = r8379 * r8379;
        double r8394 = r8382 * r8384;
        double r8395 = r8393 - r8394;
        double r8396 = sqrt(r8395);
        double r8397 = r8396 - r8379;
        double r8398 = cbrt(r8397);
        double r8399 = r8398 * r8398;
        double r8400 = r8382 / r8399;
        double r8401 = r8384 / r8398;
        double r8402 = r8400 * r8401;
        double r8403 = r8402 / r8384;
        double r8404 = 2.2595025069381943e+39;
        bool r8405 = r8379 <= r8404;
        double r8406 = 1;
        double r8407 = -r8379;
        double r8408 = r8384 * r8382;
        double r8409 = r8393 - r8408;
        double r8410 = sqrt(r8409);
        double r8411 = r8407 - r8410;
        double r8412 = r8384 / r8411;
        double r8413 = r8406 / r8412;
        double r8414 = r8389 / r8384;
        double r8415 = r8405 ? r8413 : r8414;
        double r8416 = r8392 ? r8403 : r8415;
        double r8417 = r8381 ? r8390 : r8416;
        return r8417;
}

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 r8418, r8419, r8420, r8421, r8422, r8423, r8424, r8425, r8426, r8427;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r8418);
        mpfr_init(r8419);
        mpfr_init(r8420);
        mpfr_init(r8421);
        mpfr_init(r8422);
        mpfr_init(r8423);
        mpfr_init(r8424);
        mpfr_init(r8425);
        mpfr_init(r8426);
        mpfr_init(r8427);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r8418, b_2, MPFR_RNDN);
        mpfr_neg(r8419, r8418, MPFR_RNDN);
        mpfr_mul(r8420, r8418, r8418, MPFR_RNDN);
        mpfr_set_d(r8421, a, MPFR_RNDN);
        mpfr_set_d(r8422, c, MPFR_RNDN);
        mpfr_mul(r8423, r8421, r8422, MPFR_RNDN);
        mpfr_sub(r8424, r8420, r8423, MPFR_RNDN);
        mpfr_sqrt(r8425, r8424, MPFR_RNDN);
        mpfr_sub(r8426, r8419, r8425, MPFR_RNDN);
        mpfr_div(r8427, r8426, r8421, MPFR_RNDN);
        return mpfr_get_d(r8427, MPFR_RNDN);
}

static mpfr_t r8428, r8429, r8430, r8431, r8432, r8433, r8434, r8435, r8436, r8437, r8438, r8439, r8440, r8441, r8442, r8443, r8444, r8445, r8446, r8447, r8448, r8449, r8450, r8451, r8452, r8453, r8454, r8455, r8456, r8457, r8458, r8459, r8460, r8461, r8462, r8463, r8464, r8465, r8466;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r8428);
        mpfr_init_set_str(r8429, "-0.023046085366440986", 10, MPFR_RNDN);
        mpfr_init(r8430);
        mpfr_init(r8431);
        mpfr_init_set_str(r8432, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8433);
        mpfr_init(r8434);
        mpfr_init(r8435);
        mpfr_init(r8436);
        mpfr_init(r8437);
        mpfr_init(r8438);
        mpfr_init(r8439);
        mpfr_init_set_str(r8440, "-2.5319625255424875e-142", 10, MPFR_RNDN);
        mpfr_init(r8441);
        mpfr_init(r8442);
        mpfr_init(r8443);
        mpfr_init(r8444);
        mpfr_init(r8445);
        mpfr_init(r8446);
        mpfr_init(r8447);
        mpfr_init(r8448);
        mpfr_init(r8449);
        mpfr_init(r8450);
        mpfr_init(r8451);
        mpfr_init(r8452);
        mpfr_init_set_str(r8453, "2.2595025069381943e+39", 10, MPFR_RNDN);
        mpfr_init(r8454);
        mpfr_init_set_str(r8455, "1", 10, MPFR_RNDN);
        mpfr_init(r8456);
        mpfr_init(r8457);
        mpfr_init(r8458);
        mpfr_init(r8459);
        mpfr_init(r8460);
        mpfr_init(r8461);
        mpfr_init(r8462);
        mpfr_init(r8463);
        mpfr_init(r8464);
        mpfr_init(r8465);
        mpfr_init(r8466);
}

double f_fm(double a, double b_2, double c) {
        mpfr_set_d(r8428, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r8430, mpfr_cmp(r8428, r8429) <= 0, MPFR_RNDN);
        mpfr_set_d(r8431, c, MPFR_RNDN);
        ;
        mpfr_set_d(r8433, a, MPFR_RNDN);
        mpfr_mul(r8434, r8432, r8433, MPFR_RNDN);
        mpfr_div(r8435, r8428, r8431, MPFR_RNDN);
        mpfr_div(r8436, r8434, r8435, MPFR_RNDN);
        mpfr_add(r8437, r8428, r8428, MPFR_RNDN);
        mpfr_sub(r8438, r8436, r8437, MPFR_RNDN);
        mpfr_div(r8439, r8431, r8438, MPFR_RNDN);
        ;
        mpfr_set_si(r8441, mpfr_cmp(r8428, r8440) <= 0, MPFR_RNDN);
        mpfr_mul(r8442, r8428, r8428, MPFR_RNDN);
        mpfr_mul(r8443, r8431, r8433, MPFR_RNDN);
        mpfr_sub(r8444, r8442, r8443, MPFR_RNDN);
        mpfr_sqrt(r8445, r8444, MPFR_RNDN);
        mpfr_sub(r8446, r8445, r8428, MPFR_RNDN);
        mpfr_cbrt(r8447, r8446, MPFR_RNDN);
        mpfr_mul(r8448, r8447, r8447, MPFR_RNDN);
        mpfr_div(r8449, r8431, r8448, MPFR_RNDN);
        mpfr_div(r8450, r8433, r8447, MPFR_RNDN);
        mpfr_mul(r8451, r8449, r8450, MPFR_RNDN);
        mpfr_div(r8452, r8451, r8433, MPFR_RNDN);
        ;
        mpfr_set_si(r8454, mpfr_cmp(r8428, r8453) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r8456, r8428, MPFR_RNDN);
        mpfr_mul(r8457, r8433, r8431, MPFR_RNDN);
        mpfr_sub(r8458, r8442, r8457, MPFR_RNDN);
        mpfr_sqrt(r8459, r8458, MPFR_RNDN);
        mpfr_sub(r8460, r8456, r8459, MPFR_RNDN);
        mpfr_div(r8461, r8433, r8460, MPFR_RNDN);
        mpfr_div(r8462, r8455, r8461, MPFR_RNDN);
        mpfr_div(r8463, r8438, r8433, MPFR_RNDN);
        if (mpfr_get_si(r8454, MPFR_RNDN)) { mpfr_set(r8464, r8462, MPFR_RNDN); } else { mpfr_set(r8464, r8463, MPFR_RNDN); };
        if (mpfr_get_si(r8441, MPFR_RNDN)) { mpfr_set(r8465, r8452, MPFR_RNDN); } else { mpfr_set(r8465, r8464, MPFR_RNDN); };
        if (mpfr_get_si(r8430, MPFR_RNDN)) { mpfr_set(r8466, r8439, MPFR_RNDN); } else { mpfr_set(r8466, r8465, MPFR_RNDN); };
        return mpfr_get_d(r8466, MPFR_RNDN);
}

static mpfr_t r8467, r8468, r8469, r8470, r8471, r8472, r8473, r8474, r8475, r8476, r8477, r8478, r8479, r8480, r8481, r8482, r8483, r8484, r8485, r8486, r8487, r8488, r8489, r8490, r8491, r8492, r8493, r8494, r8495, r8496, r8497, r8498, r8499, r8500, r8501, r8502, r8503, r8504, r8505;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r8467);
        mpfr_init_set_str(r8468, "-0.023046085366440986", 10, MPFR_RNDN);
        mpfr_init(r8469);
        mpfr_init(r8470);
        mpfr_init_set_str(r8471, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8472);
        mpfr_init(r8473);
        mpfr_init(r8474);
        mpfr_init(r8475);
        mpfr_init(r8476);
        mpfr_init(r8477);
        mpfr_init(r8478);
        mpfr_init_set_str(r8479, "-2.5319625255424875e-142", 10, MPFR_RNDN);
        mpfr_init(r8480);
        mpfr_init(r8481);
        mpfr_init(r8482);
        mpfr_init(r8483);
        mpfr_init(r8484);
        mpfr_init(r8485);
        mpfr_init(r8486);
        mpfr_init(r8487);
        mpfr_init(r8488);
        mpfr_init(r8489);
        mpfr_init(r8490);
        mpfr_init(r8491);
        mpfr_init_set_str(r8492, "2.2595025069381943e+39", 10, MPFR_RNDN);
        mpfr_init(r8493);
        mpfr_init_set_str(r8494, "1", 10, MPFR_RNDN);
        mpfr_init(r8495);
        mpfr_init(r8496);
        mpfr_init(r8497);
        mpfr_init(r8498);
        mpfr_init(r8499);
        mpfr_init(r8500);
        mpfr_init(r8501);
        mpfr_init(r8502);
        mpfr_init(r8503);
        mpfr_init(r8504);
        mpfr_init(r8505);
}

double f_dm(double a, double b_2, double c) {
        mpfr_set_d(r8467, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r8469, mpfr_cmp(r8467, r8468) <= 0, MPFR_RNDN);
        mpfr_set_d(r8470, c, MPFR_RNDN);
        ;
        mpfr_set_d(r8472, a, MPFR_RNDN);
        mpfr_mul(r8473, r8471, r8472, MPFR_RNDN);
        mpfr_div(r8474, r8467, r8470, MPFR_RNDN);
        mpfr_div(r8475, r8473, r8474, MPFR_RNDN);
        mpfr_add(r8476, r8467, r8467, MPFR_RNDN);
        mpfr_sub(r8477, r8475, r8476, MPFR_RNDN);
        mpfr_div(r8478, r8470, r8477, MPFR_RNDN);
        ;
        mpfr_set_si(r8480, mpfr_cmp(r8467, r8479) <= 0, MPFR_RNDN);
        mpfr_mul(r8481, r8467, r8467, MPFR_RNDN);
        mpfr_mul(r8482, r8470, r8472, MPFR_RNDN);
        mpfr_sub(r8483, r8481, r8482, MPFR_RNDN);
        mpfr_sqrt(r8484, r8483, MPFR_RNDN);
        mpfr_sub(r8485, r8484, r8467, MPFR_RNDN);
        mpfr_cbrt(r8486, r8485, MPFR_RNDN);
        mpfr_mul(r8487, r8486, r8486, MPFR_RNDN);
        mpfr_div(r8488, r8470, r8487, MPFR_RNDN);
        mpfr_div(r8489, r8472, r8486, MPFR_RNDN);
        mpfr_mul(r8490, r8488, r8489, MPFR_RNDN);
        mpfr_div(r8491, r8490, r8472, MPFR_RNDN);
        ;
        mpfr_set_si(r8493, mpfr_cmp(r8467, r8492) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r8495, r8467, MPFR_RNDN);
        mpfr_mul(r8496, r8472, r8470, MPFR_RNDN);
        mpfr_sub(r8497, r8481, r8496, MPFR_RNDN);
        mpfr_sqrt(r8498, r8497, MPFR_RNDN);
        mpfr_sub(r8499, r8495, r8498, MPFR_RNDN);
        mpfr_div(r8500, r8472, r8499, MPFR_RNDN);
        mpfr_div(r8501, r8494, r8500, MPFR_RNDN);
        mpfr_div(r8502, r8477, r8472, MPFR_RNDN);
        if (mpfr_get_si(r8493, MPFR_RNDN)) { mpfr_set(r8503, r8501, MPFR_RNDN); } else { mpfr_set(r8503, r8502, MPFR_RNDN); };
        if (mpfr_get_si(r8480, MPFR_RNDN)) { mpfr_set(r8504, r8491, MPFR_RNDN); } else { mpfr_set(r8504, r8503, MPFR_RNDN); };
        if (mpfr_get_si(r8469, MPFR_RNDN)) { mpfr_set(r8505, r8478, MPFR_RNDN); } else { mpfr_set(r8505, r8504, MPFR_RNDN); };
        return mpfr_get_d(r8505, MPFR_RNDN);
}

