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

char *name = "Diagrams.ThreeD.Shapes:frustum from diagrams-lib-1.3.0.3, B";

double f_if(float x, float y, float z) {
        float r51039 = x;
        float r51040 = y;
        float r51041 = r51040 - r51039;
        float r51042 = z;
        float r51043 = r51041 * r51042;
        float r51044 = r51039 + r51043;
        return r51044;
}

double f_id(double x, double y, double z) {
        double r51045 = x;
        double r51046 = y;
        double r51047 = r51046 - r51045;
        double r51048 = z;
        double r51049 = r51047 * r51048;
        double r51050 = r51045 + r51049;
        return r51050;
}


double f_of(float x, float y, float z) {
        float r51051 = x;
        float r51052 = y;
        float r51053 = r51052 - r51051;
        float r51054 = z;
        float r51055 = r51053 * r51054;
        float r51056 = r51051 + r51055;
        return r51056;
}

double f_od(double x, double y, double z) {
        double r51057 = x;
        double r51058 = y;
        double r51059 = r51058 - r51057;
        double r51060 = z;
        double r51061 = r51059 * r51060;
        double r51062 = r51057 + r51061;
        return r51062;
}

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 r51063, r51064, r51065, r51066, r51067, r51068;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r51063);
        mpfr_init(r51064);
        mpfr_init(r51065);
        mpfr_init(r51066);
        mpfr_init(r51067);
        mpfr_init(r51068);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r51063, x, MPFR_RNDN);
        mpfr_set_d(r51064, y, MPFR_RNDN);
        mpfr_sub(r51065, r51064, r51063, MPFR_RNDN);
        mpfr_set_d(r51066, z, MPFR_RNDN);
        mpfr_mul(r51067, r51065, r51066, MPFR_RNDN);
        mpfr_add(r51068, r51063, r51067, MPFR_RNDN);
        return mpfr_get_d(r51068, MPFR_RNDN);
}

static mpfr_t r51069, r51070, r51071, r51072, r51073, r51074;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r51069);
        mpfr_init(r51070);
        mpfr_init(r51071);
        mpfr_init(r51072);
        mpfr_init(r51073);
        mpfr_init(r51074);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r51069, x, MPFR_RNDN);
        mpfr_set_d(r51070, y, MPFR_RNDN);
        mpfr_sub(r51071, r51070, r51069, MPFR_RNDN);
        mpfr_set_d(r51072, z, MPFR_RNDN);
        mpfr_mul(r51073, r51071, r51072, MPFR_RNDN);
        mpfr_add(r51074, r51069, r51073, MPFR_RNDN);
        return mpfr_get_d(r51074, MPFR_RNDN);
}

static mpfr_t r51075, r51076, r51077, r51078, r51079, r51080;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r51075);
        mpfr_init(r51076);
        mpfr_init(r51077);
        mpfr_init(r51078);
        mpfr_init(r51079);
        mpfr_init(r51080);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r51075, x, MPFR_RNDN);
        mpfr_set_d(r51076, y, MPFR_RNDN);
        mpfr_sub(r51077, r51076, r51075, MPFR_RNDN);
        mpfr_set_d(r51078, z, MPFR_RNDN);
        mpfr_mul(r51079, r51077, r51078, MPFR_RNDN);
        mpfr_add(r51080, r51075, r51079, MPFR_RNDN);
        return mpfr_get_d(r51080, MPFR_RNDN);
}

