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

char *name = "Diagrams.TwoD.Apollonian:initialConfig from diagrams-contrib-1.3.0.5, B";

double f_if(float x, float y, float z) {
        float r52611 = x;
        float r52612 = y;
        float r52613 = r52612 * r52612;
        float r52614 = z;
        float r52615 = r52614 * r52614;
        float r52616 = r52613 - r52615;
        float r52617 = sqrt(r52616);
        float r52618 = r52611 * r52617;
        return r52618;
}

double f_id(double x, double y, double z) {
        double r52619 = x;
        double r52620 = y;
        double r52621 = r52620 * r52620;
        double r52622 = z;
        double r52623 = r52622 * r52622;
        double r52624 = r52621 - r52623;
        double r52625 = sqrt(r52624);
        double r52626 = r52619 * r52625;
        return r52626;
}


double f_of(float x, float y, float __attribute__((unused)) z) {
        float r52627 = y;
        float r52628 = 1.5622464906955437e-289;
        bool r52629 = r52627 <= r52628;
        float r52630 = x;
        float r52631 = -r52630;
        float r52632 = r52627 * r52631;
        float r52633 = r52630 * r52627;
        float r52634 = r52629 ? r52632 : r52633;
        return r52634;
}

double f_od(double x, double y, double __attribute__((unused)) z) {
        double r52635 = y;
        double r52636 = 1.5622464906955437e-289;
        bool r52637 = r52635 <= r52636;
        double r52638 = x;
        double r52639 = -r52638;
        double r52640 = r52635 * r52639;
        double r52641 = r52638 * r52635;
        double r52642 = r52637 ? r52640 : r52641;
        return r52642;
}

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 r52643, r52644, r52645, r52646, r52647, r52648, r52649, r52650;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52643);
        mpfr_init(r52644);
        mpfr_init(r52645);
        mpfr_init(r52646);
        mpfr_init(r52647);
        mpfr_init(r52648);
        mpfr_init(r52649);
        mpfr_init(r52650);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r52643, x, MPFR_RNDN);
        mpfr_set_d(r52644, y, MPFR_RNDN);
        mpfr_mul(r52645, r52644, r52644, MPFR_RNDN);
        mpfr_set_d(r52646, z, MPFR_RNDN);
        mpfr_mul(r52647, r52646, r52646, MPFR_RNDN);
        mpfr_sub(r52648, r52645, r52647, MPFR_RNDN);
        mpfr_sqrt(r52649, r52648, MPFR_RNDN);
        mpfr_mul(r52650, r52643, r52649, MPFR_RNDN);
        return mpfr_get_d(r52650, MPFR_RNDN);
}

static mpfr_t r52651, r52652, r52653, r52654, r52655, r52656, r52657, r52658;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52651);
        mpfr_init_set_str(r52652, "1.5622464906955437e-289", 10, MPFR_RNDN);
        mpfr_init(r52653);
        mpfr_init(r52654);
        mpfr_init(r52655);
        mpfr_init(r52656);
        mpfr_init(r52657);
        mpfr_init(r52658);
}

double f_fm(double x, double y, double __attribute__((unused)) z) {
        mpfr_set_d(r52651, y, MPFR_RNDN);
        ;
        mpfr_set_si(r52653, mpfr_cmp(r52651, r52652) <= 0, MPFR_RNDN);
        mpfr_set_d(r52654, x, MPFR_RNDN);
        mpfr_neg(r52655, r52654, MPFR_RNDN);
        mpfr_mul(r52656, r52651, r52655, MPFR_RNDN);
        mpfr_mul(r52657, r52654, r52651, MPFR_RNDN);
        if (mpfr_get_si(r52653, MPFR_RNDN)) { mpfr_set(r52658, r52656, MPFR_RNDN); } else { mpfr_set(r52658, r52657, MPFR_RNDN); };
        return mpfr_get_d(r52658, MPFR_RNDN);
}

static mpfr_t r52659, r52660, r52661, r52662, r52663, r52664, r52665, r52666;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52659);
        mpfr_init_set_str(r52660, "1.5622464906955437e-289", 10, MPFR_RNDN);
        mpfr_init(r52661);
        mpfr_init(r52662);
        mpfr_init(r52663);
        mpfr_init(r52664);
        mpfr_init(r52665);
        mpfr_init(r52666);
}

double f_dm(double x, double y, double __attribute__((unused)) z) {
        mpfr_set_d(r52659, y, MPFR_RNDN);
        ;
        mpfr_set_si(r52661, mpfr_cmp(r52659, r52660) <= 0, MPFR_RNDN);
        mpfr_set_d(r52662, x, MPFR_RNDN);
        mpfr_neg(r52663, r52662, MPFR_RNDN);
        mpfr_mul(r52664, r52659, r52663, MPFR_RNDN);
        mpfr_mul(r52665, r52662, r52659, MPFR_RNDN);
        if (mpfr_get_si(r52661, MPFR_RNDN)) { mpfr_set(r52666, r52664, MPFR_RNDN); } else { mpfr_set(r52666, r52665, MPFR_RNDN); };
        return mpfr_get_d(r52666, MPFR_RNDN);
}

