#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 r34082 = x;
        float r34083 = y;
        float r34084 = r34083 - r34082;
        float r34085 = z;
        float r34086 = r34084 * r34085;
        float r34087 = r34082 + r34086;
        return r34087;
}

double f_id(double x, double y, double z) {
        double r34088 = x;
        double r34089 = y;
        double r34090 = r34089 - r34088;
        double r34091 = z;
        double r34092 = r34090 * r34091;
        double r34093 = r34088 + r34092;
        return r34093;
}


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

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

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 r34106, r34107, r34108, r34109, r34110, r34111;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34106);
        mpfr_init(r34107);
        mpfr_init(r34108);
        mpfr_init(r34109);
        mpfr_init(r34110);
        mpfr_init(r34111);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r34106, x, MPFR_RNDN);
        mpfr_set_d(r34107, y, MPFR_RNDN);
        mpfr_sub(r34108, r34107, r34106, MPFR_RNDN);
        mpfr_set_d(r34109, z, MPFR_RNDN);
        mpfr_mul(r34110, r34108, r34109, MPFR_RNDN);
        mpfr_add(r34111, r34106, r34110, MPFR_RNDN);
        return mpfr_get_d(r34111, MPFR_RNDN);
}

static mpfr_t r34112, r34113, r34114, r34115, r34116, r34117;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34112);
        mpfr_init(r34113);
        mpfr_init(r34114);
        mpfr_init(r34115);
        mpfr_init(r34116);
        mpfr_init(r34117);
}

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

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34118);
        mpfr_init(r34119);
        mpfr_init(r34120);
        mpfr_init(r34121);
        mpfr_init(r34122);
        mpfr_init(r34123);
}

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

