#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 r33858 = x;
        float r33859 = y;
        float r33860 = r33859 - r33858;
        float r33861 = z;
        float r33862 = r33860 * r33861;
        float r33863 = r33858 + r33862;
        return r33863;
}

double f_id(double x, double y, double z) {
        double r33864 = x;
        double r33865 = y;
        double r33866 = r33865 - r33864;
        double r33867 = z;
        double r33868 = r33866 * r33867;
        double r33869 = r33864 + r33868;
        return r33869;
}


double f_of(float x, float y, float z) {
        float r33870 = x;
        float r33871 = y;
        float r33872 = r33871 - r33870;
        float r33873 = z;
        float r33874 = r33872 * r33873;
        float r33875 = r33870 + r33874;
        return r33875;
}

double f_od(double x, double y, double z) {
        double r33876 = x;
        double r33877 = y;
        double r33878 = r33877 - r33876;
        double r33879 = z;
        double r33880 = r33878 * r33879;
        double r33881 = r33876 + r33880;
        return r33881;
}

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 r33882, r33883, r33884, r33885, r33886, r33887;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r33882);
        mpfr_init(r33883);
        mpfr_init(r33884);
        mpfr_init(r33885);
        mpfr_init(r33886);
        mpfr_init(r33887);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r33882, x, MPFR_RNDN);
        mpfr_set_d(r33883, y, MPFR_RNDN);
        mpfr_sub(r33884, r33883, r33882, MPFR_RNDN);
        mpfr_set_d(r33885, z, MPFR_RNDN);
        mpfr_mul(r33886, r33884, r33885, MPFR_RNDN);
        mpfr_add(r33887, r33882, r33886, MPFR_RNDN);
        return mpfr_get_d(r33887, MPFR_RNDN);
}

static mpfr_t r33888, r33889, r33890, r33891, r33892, r33893;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r33888);
        mpfr_init(r33889);
        mpfr_init(r33890);
        mpfr_init(r33891);
        mpfr_init(r33892);
        mpfr_init(r33893);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r33888, x, MPFR_RNDN);
        mpfr_set_d(r33889, y, MPFR_RNDN);
        mpfr_sub(r33890, r33889, r33888, MPFR_RNDN);
        mpfr_set_d(r33891, z, MPFR_RNDN);
        mpfr_mul(r33892, r33890, r33891, MPFR_RNDN);
        mpfr_add(r33893, r33888, r33892, MPFR_RNDN);
        return mpfr_get_d(r33893, MPFR_RNDN);
}

static mpfr_t r33894, r33895, r33896, r33897, r33898, r33899;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r33894);
        mpfr_init(r33895);
        mpfr_init(r33896);
        mpfr_init(r33897);
        mpfr_init(r33898);
        mpfr_init(r33899);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r33894, x, MPFR_RNDN);
        mpfr_set_d(r33895, y, MPFR_RNDN);
        mpfr_sub(r33896, r33895, r33894, MPFR_RNDN);
        mpfr_set_d(r33897, z, MPFR_RNDN);
        mpfr_mul(r33898, r33896, r33897, MPFR_RNDN);
        mpfr_add(r33899, r33894, r33898, MPFR_RNDN);
        return mpfr_get_d(r33899, MPFR_RNDN);
}

