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

char *name = "Graphics.Rasterific.Svg.PathConverter:arcToSegments from rasterific-svg-0.2.3.1";

double f_if(float x, float y, float z, float t) {
        float r50051 = x;
        float r50052 = r50051 * r50051;
        float r50053 = y;
        float r50054 = r50053 * r50053;
        float r50055 = r50052 / r50054;
        float r50056 = z;
        float r50057 = r50056 * r50056;
        float r50058 = t;
        float r50059 = r50058 * r50058;
        float r50060 = r50057 / r50059;
        float r50061 = r50055 + r50060;
        return r50061;
}

double f_id(double x, double y, double z, double t) {
        double r50062 = x;
        double r50063 = r50062 * r50062;
        double r50064 = y;
        double r50065 = r50064 * r50064;
        double r50066 = r50063 / r50065;
        double r50067 = z;
        double r50068 = r50067 * r50067;
        double r50069 = t;
        double r50070 = r50069 * r50069;
        double r50071 = r50068 / r50070;
        double r50072 = r50066 + r50071;
        return r50072;
}


double f_of(float x, float y, float z, float t) {
        float r50073 = x;
        float r50074 = y;
        float r50075 = r50073 / r50074;
        float r50076 = fabs(r50075);
        float r50077 = sqrt(r50076);
        float r50078 = r50076 * r50077;
        float r50079 = r50078 * r50077;
        float r50080 = z;
        float r50081 = t;
        float r50082 = r50080 / r50081;
        float r50083 = fabs(r50082);
        float r50084 = r50083 * r50083;
        float r50085 = r50079 + r50084;
        return r50085;
}

double f_od(double x, double y, double z, double t) {
        double r50086 = x;
        double r50087 = y;
        double r50088 = r50086 / r50087;
        double r50089 = fabs(r50088);
        double r50090 = sqrt(r50089);
        double r50091 = r50089 * r50090;
        double r50092 = r50091 * r50090;
        double r50093 = z;
        double r50094 = t;
        double r50095 = r50093 / r50094;
        double r50096 = fabs(r50095);
        double r50097 = r50096 * r50096;
        double r50098 = r50092 + r50097;
        return r50098;
}

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 r50099, r50100, r50101, r50102, r50103, r50104, r50105, r50106, r50107, r50108, r50109;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50099);
        mpfr_init(r50100);
        mpfr_init(r50101);
        mpfr_init(r50102);
        mpfr_init(r50103);
        mpfr_init(r50104);
        mpfr_init(r50105);
        mpfr_init(r50106);
        mpfr_init(r50107);
        mpfr_init(r50108);
        mpfr_init(r50109);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r50099, x, MPFR_RNDN);
        mpfr_mul(r50100, r50099, r50099, MPFR_RNDN);
        mpfr_set_d(r50101, y, MPFR_RNDN);
        mpfr_mul(r50102, r50101, r50101, MPFR_RNDN);
        mpfr_div(r50103, r50100, r50102, MPFR_RNDN);
        mpfr_set_d(r50104, z, MPFR_RNDN);
        mpfr_mul(r50105, r50104, r50104, MPFR_RNDN);
        mpfr_set_d(r50106, t, MPFR_RNDN);
        mpfr_mul(r50107, r50106, r50106, MPFR_RNDN);
        mpfr_div(r50108, r50105, r50107, MPFR_RNDN);
        mpfr_add(r50109, r50103, r50108, MPFR_RNDN);
        return mpfr_get_d(r50109, MPFR_RNDN);
}

static mpfr_t r50110, r50111, r50112, r50113, r50114, r50115, r50116, r50117, r50118, r50119, r50120, r50121, r50122;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50110);
        mpfr_init(r50111);
        mpfr_init(r50112);
        mpfr_init(r50113);
        mpfr_init(r50114);
        mpfr_init(r50115);
        mpfr_init(r50116);
        mpfr_init(r50117);
        mpfr_init(r50118);
        mpfr_init(r50119);
        mpfr_init(r50120);
        mpfr_init(r50121);
        mpfr_init(r50122);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r50110, x, MPFR_RNDN);
        mpfr_set_d(r50111, y, MPFR_RNDN);
        mpfr_div(r50112, r50110, r50111, MPFR_RNDN);
        mpfr_abs(r50113, r50112, MPFR_RNDN);
        mpfr_sqrt(r50114, r50113, MPFR_RNDN);
        mpfr_mul(r50115, r50113, r50114, MPFR_RNDN);
        mpfr_mul(r50116, r50115, r50114, MPFR_RNDN);
        mpfr_set_d(r50117, z, MPFR_RNDN);
        mpfr_set_d(r50118, t, MPFR_RNDN);
        mpfr_div(r50119, r50117, r50118, MPFR_RNDN);
        mpfr_abs(r50120, r50119, MPFR_RNDN);
        mpfr_mul(r50121, r50120, r50120, MPFR_RNDN);
        mpfr_add(r50122, r50116, r50121, MPFR_RNDN);
        return mpfr_get_d(r50122, MPFR_RNDN);
}

static mpfr_t r50123, r50124, r50125, r50126, r50127, r50128, r50129, r50130, r50131, r50132, r50133, r50134, r50135;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50123);
        mpfr_init(r50124);
        mpfr_init(r50125);
        mpfr_init(r50126);
        mpfr_init(r50127);
        mpfr_init(r50128);
        mpfr_init(r50129);
        mpfr_init(r50130);
        mpfr_init(r50131);
        mpfr_init(r50132);
        mpfr_init(r50133);
        mpfr_init(r50134);
        mpfr_init(r50135);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r50123, x, MPFR_RNDN);
        mpfr_set_d(r50124, y, MPFR_RNDN);
        mpfr_div(r50125, r50123, r50124, MPFR_RNDN);
        mpfr_abs(r50126, r50125, MPFR_RNDN);
        mpfr_sqrt(r50127, r50126, MPFR_RNDN);
        mpfr_mul(r50128, r50126, r50127, MPFR_RNDN);
        mpfr_mul(r50129, r50128, r50127, MPFR_RNDN);
        mpfr_set_d(r50130, z, MPFR_RNDN);
        mpfr_set_d(r50131, t, MPFR_RNDN);
        mpfr_div(r50132, r50130, r50131, MPFR_RNDN);
        mpfr_abs(r50133, r50132, MPFR_RNDN);
        mpfr_mul(r50134, r50133, r50133, MPFR_RNDN);
        mpfr_add(r50135, r50129, r50134, MPFR_RNDN);
        return mpfr_get_d(r50135, MPFR_RNDN);
}

