#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 r33897 = x;
        float r33898 = y;
        float r33899 = r33898 - r33897;
        float r33900 = z;
        float r33901 = r33899 * r33900;
        float r33902 = r33897 + r33901;
        return r33902;
}

double f_id(double x, double y, double z) {
        double r33903 = x;
        double r33904 = y;
        double r33905 = r33904 - r33903;
        double r33906 = z;
        double r33907 = r33905 * r33906;
        double r33908 = r33903 + r33907;
        return r33908;
}


double f_of(float x, float y, float z) {
        float r33909 = x;
        float r33910 = y;
        float r33911 = r33910 - r33909;
        float r33912 = z;
        float r33913 = r33911 * r33912;
        float r33914 = r33909 + r33913;
        return r33914;
}

double f_od(double x, double y, double z) {
        double r33915 = x;
        double r33916 = y;
        double r33917 = r33916 - r33915;
        double r33918 = z;
        double r33919 = r33917 * r33918;
        double r33920 = r33915 + r33919;
        return r33920;
}

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 r33921, r33922, r33923, r33924, r33925, r33926;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r33921);
        mpfr_init(r33922);
        mpfr_init(r33923);
        mpfr_init(r33924);
        mpfr_init(r33925);
        mpfr_init(r33926);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r33921, x, MPFR_RNDN);
        mpfr_set_d(r33922, y, MPFR_RNDN);
        mpfr_sub(r33923, r33922, r33921, MPFR_RNDN);
        mpfr_set_d(r33924, z, MPFR_RNDN);
        mpfr_mul(r33925, r33923, r33924, MPFR_RNDN);
        mpfr_add(r33926, r33921, r33925, MPFR_RNDN);
        return mpfr_get_d(r33926, MPFR_RNDN);
}

static mpfr_t r33927, r33928, r33929, r33930, r33931, r33932;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r33927);
        mpfr_init(r33928);
        mpfr_init(r33929);
        mpfr_init(r33930);
        mpfr_init(r33931);
        mpfr_init(r33932);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r33927, x, MPFR_RNDN);
        mpfr_set_d(r33928, y, MPFR_RNDN);
        mpfr_sub(r33929, r33928, r33927, MPFR_RNDN);
        mpfr_set_d(r33930, z, MPFR_RNDN);
        mpfr_mul(r33931, r33929, r33930, MPFR_RNDN);
        mpfr_add(r33932, r33927, r33931, MPFR_RNDN);
        return mpfr_get_d(r33932, MPFR_RNDN);
}

static mpfr_t r33933, r33934, r33935, r33936, r33937, r33938;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r33933);
        mpfr_init(r33934);
        mpfr_init(r33935);
        mpfr_init(r33936);
        mpfr_init(r33937);
        mpfr_init(r33938);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r33933, x, MPFR_RNDN);
        mpfr_set_d(r33934, y, MPFR_RNDN);
        mpfr_sub(r33935, r33934, r33933, MPFR_RNDN);
        mpfr_set_d(r33936, z, MPFR_RNDN);
        mpfr_mul(r33937, r33935, r33936, MPFR_RNDN);
        mpfr_add(r33938, r33933, r33937, MPFR_RNDN);
        return mpfr_get_d(r33938, MPFR_RNDN);
}

