#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 r34087 = x;
        float r34088 = y;
        float r34089 = r34088 - r34087;
        float r34090 = z;
        float r34091 = r34089 * r34090;
        float r34092 = r34087 + r34091;
        return r34092;
}

double f_id(double x, double y, double z) {
        double r34093 = x;
        double r34094 = y;
        double r34095 = r34094 - r34093;
        double r34096 = z;
        double r34097 = r34095 * r34096;
        double r34098 = r34093 + r34097;
        return r34098;
}


double f_of(float x, float y, float z) {
        float r34099 = x;
        float r34100 = y;
        float r34101 = r34100 - r34099;
        float r34102 = z;
        float r34103 = r34101 * r34102;
        float r34104 = r34099 + r34103;
        return r34104;
}

double f_od(double x, double y, double z) {
        double r34105 = x;
        double r34106 = y;
        double r34107 = r34106 - r34105;
        double r34108 = z;
        double r34109 = r34107 * r34108;
        double r34110 = r34105 + r34109;
        return r34110;
}

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 r34111, r34112, r34113, r34114, r34115, r34116;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34111);
        mpfr_init(r34112);
        mpfr_init(r34113);
        mpfr_init(r34114);
        mpfr_init(r34115);
        mpfr_init(r34116);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r34111, x, MPFR_RNDN);
        mpfr_set_d(r34112, y, MPFR_RNDN);
        mpfr_sub(r34113, r34112, r34111, MPFR_RNDN);
        mpfr_set_d(r34114, z, MPFR_RNDN);
        mpfr_mul(r34115, r34113, r34114, MPFR_RNDN);
        mpfr_add(r34116, r34111, r34115, MPFR_RNDN);
        return mpfr_get_d(r34116, MPFR_RNDN);
}

static mpfr_t r34117, r34118, r34119, r34120, r34121, r34122;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34117);
        mpfr_init(r34118);
        mpfr_init(r34119);
        mpfr_init(r34120);
        mpfr_init(r34121);
        mpfr_init(r34122);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r34117, x, MPFR_RNDN);
        mpfr_set_d(r34118, y, MPFR_RNDN);
        mpfr_sub(r34119, r34118, r34117, MPFR_RNDN);
        mpfr_set_d(r34120, z, MPFR_RNDN);
        mpfr_mul(r34121, r34119, r34120, MPFR_RNDN);
        mpfr_add(r34122, r34117, r34121, MPFR_RNDN);
        return mpfr_get_d(r34122, MPFR_RNDN);
}

static mpfr_t r34123, r34124, r34125, r34126, r34127, r34128;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34123);
        mpfr_init(r34124);
        mpfr_init(r34125);
        mpfr_init(r34126);
        mpfr_init(r34127);
        mpfr_init(r34128);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r34123, x, MPFR_RNDN);
        mpfr_set_d(r34124, y, MPFR_RNDN);
        mpfr_sub(r34125, r34124, r34123, MPFR_RNDN);
        mpfr_set_d(r34126, z, MPFR_RNDN);
        mpfr_mul(r34127, r34125, r34126, MPFR_RNDN);
        mpfr_add(r34128, r34123, r34127, MPFR_RNDN);
        return mpfr_get_d(r34128, MPFR_RNDN);
}

