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

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

double f_if(float x, float y, float z) {
        float r52500 = 2.0;
        float r52501 = x;
        float r52502 = y;
        float r52503 = r52501 * r52502;
        float r52504 = z;
        float r52505 = r52501 * r52504;
        float r52506 = r52503 + r52505;
        float r52507 = r52502 * r52504;
        float r52508 = r52506 + r52507;
        float r52509 = sqrt(r52508);
        float r52510 = r52500 * r52509;
        return r52510;
}

double f_id(double x, double y, double z) {
        double r52511 = 2.0;
        double r52512 = x;
        double r52513 = y;
        double r52514 = r52512 * r52513;
        double r52515 = z;
        double r52516 = r52512 * r52515;
        double r52517 = r52514 + r52516;
        double r52518 = r52513 * r52515;
        double r52519 = r52517 + r52518;
        double r52520 = sqrt(r52519);
        double r52521 = r52511 * r52520;
        return r52521;
}


double f_of(float x, float y, float z) {
        float r52522 = x;
        float r52523 = z;
        float r52524 = y;
        float r52525 = r52523 + r52524;
        float r52526 = r52522 * r52525;
        float r52527 = r52524 * r52523;
        float r52528 = r52526 + r52527;
        float r52529 = sqrt(r52528);
        float r52530 = 2.0;
        float r52531 = r52529 * r52530;
        return r52531;
}

double f_od(double x, double y, double z) {
        double r52532 = x;
        double r52533 = z;
        double r52534 = y;
        double r52535 = r52533 + r52534;
        double r52536 = r52532 * r52535;
        double r52537 = r52534 * r52533;
        double r52538 = r52536 + r52537;
        double r52539 = sqrt(r52538);
        double r52540 = 2.0;
        double r52541 = r52539 * r52540;
        return r52541;
}

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 r52542, r52543, r52544, r52545, r52546, r52547, r52548, r52549, r52550, r52551, r52552;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r52542, "2.0", 10, MPFR_RNDN);
        mpfr_init(r52543);
        mpfr_init(r52544);
        mpfr_init(r52545);
        mpfr_init(r52546);
        mpfr_init(r52547);
        mpfr_init(r52548);
        mpfr_init(r52549);
        mpfr_init(r52550);
        mpfr_init(r52551);
        mpfr_init(r52552);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r52543, x, MPFR_RNDN);
        mpfr_set_d(r52544, y, MPFR_RNDN);
        mpfr_mul(r52545, r52543, r52544, MPFR_RNDN);
        mpfr_set_d(r52546, z, MPFR_RNDN);
        mpfr_mul(r52547, r52543, r52546, MPFR_RNDN);
        mpfr_add(r52548, r52545, r52547, MPFR_RNDN);
        mpfr_mul(r52549, r52544, r52546, MPFR_RNDN);
        mpfr_add(r52550, r52548, r52549, MPFR_RNDN);
        mpfr_sqrt(r52551, r52550, MPFR_RNDN);
        mpfr_mul(r52552, r52542, r52551, MPFR_RNDN);
        return mpfr_get_d(r52552, MPFR_RNDN);
}

static mpfr_t r52553, r52554, r52555, r52556, r52557, r52558, r52559, r52560, r52561, r52562;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52553);
        mpfr_init(r52554);
        mpfr_init(r52555);
        mpfr_init(r52556);
        mpfr_init(r52557);
        mpfr_init(r52558);
        mpfr_init(r52559);
        mpfr_init(r52560);
        mpfr_init_set_str(r52561, "2.0", 10, MPFR_RNDN);
        mpfr_init(r52562);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r52553, x, MPFR_RNDN);
        mpfr_set_d(r52554, z, MPFR_RNDN);
        mpfr_set_d(r52555, y, MPFR_RNDN);
        mpfr_add(r52556, r52554, r52555, MPFR_RNDN);
        mpfr_mul(r52557, r52553, r52556, MPFR_RNDN);
        mpfr_mul(r52558, r52555, r52554, MPFR_RNDN);
        mpfr_add(r52559, r52557, r52558, MPFR_RNDN);
        mpfr_sqrt(r52560, r52559, MPFR_RNDN);
        ;
        mpfr_mul(r52562, r52560, r52561, MPFR_RNDN);
        return mpfr_get_d(r52562, MPFR_RNDN);
}

static mpfr_t r52563, r52564, r52565, r52566, r52567, r52568, r52569, r52570, r52571, r52572;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52563);
        mpfr_init(r52564);
        mpfr_init(r52565);
        mpfr_init(r52566);
        mpfr_init(r52567);
        mpfr_init(r52568);
        mpfr_init(r52569);
        mpfr_init(r52570);
        mpfr_init_set_str(r52571, "2.0", 10, MPFR_RNDN);
        mpfr_init(r52572);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r52563, x, MPFR_RNDN);
        mpfr_set_d(r52564, z, MPFR_RNDN);
        mpfr_set_d(r52565, y, MPFR_RNDN);
        mpfr_add(r52566, r52564, r52565, MPFR_RNDN);
        mpfr_mul(r52567, r52563, r52566, MPFR_RNDN);
        mpfr_mul(r52568, r52565, r52564, MPFR_RNDN);
        mpfr_add(r52569, r52567, r52568, MPFR_RNDN);
        mpfr_sqrt(r52570, r52569, MPFR_RNDN);
        ;
        mpfr_mul(r52572, r52570, r52571, MPFR_RNDN);
        return mpfr_get_d(r52572, MPFR_RNDN);
}

