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

char *name = "Data.Colour.CIE:cieLAB from colour-2.3.3, A";

double f_if(float x, float y) {
        float r57351 = x;
        float r57352 = 16.0;
        float r57353 = 116.0;
        float r57354 = r57352 / r57353;
        float r57355 = r57351 - r57354;
        float r57356 = 3.0;
        float r57357 = r57355 * r57356;
        float r57358 = y;
        float r57359 = r57357 * r57358;
        return r57359;
}

double f_id(double x, double y) {
        double r57360 = x;
        double r57361 = 16.0;
        double r57362 = 116.0;
        double r57363 = r57361 / r57362;
        double r57364 = r57360 - r57363;
        double r57365 = 3.0;
        double r57366 = r57364 * r57365;
        double r57367 = y;
        double r57368 = r57366 * r57367;
        return r57368;
}


double f_of(float x, float y) {
        float r57369 = x;
        float r57370 = 16.0;
        float r57371 = 116.0;
        float r57372 = r57370 / r57371;
        float r57373 = r57369 - r57372;
        float r57374 = 3.0;
        float r57375 = y;
        float r57376 = r57374 * r57375;
        float r57377 = r57373 * r57376;
        return r57377;
}

double f_od(double x, double y) {
        double r57378 = x;
        double r57379 = 16.0;
        double r57380 = 116.0;
        double r57381 = r57379 / r57380;
        double r57382 = r57378 - r57381;
        double r57383 = 3.0;
        double r57384 = y;
        double r57385 = r57383 * r57384;
        double r57386 = r57382 * r57385;
        return r57386;
}

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 r57387, r57388, r57389, r57390, r57391, r57392, r57393, r57394, r57395;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57387);
        mpfr_init_set_str(r57388, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57389, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57390);
        mpfr_init(r57391);
        mpfr_init_set_str(r57392, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57393);
        mpfr_init(r57394);
        mpfr_init(r57395);
}

double f_im(double x, double y) {
        mpfr_set_d(r57387, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57390, r57388, r57389, MPFR_RNDN);
        mpfr_sub(r57391, r57387, r57390, MPFR_RNDN);
        ;
        mpfr_mul(r57393, r57391, r57392, MPFR_RNDN);
        mpfr_set_d(r57394, y, MPFR_RNDN);
        mpfr_mul(r57395, r57393, r57394, MPFR_RNDN);
        return mpfr_get_d(r57395, MPFR_RNDN);
}

static mpfr_t r57396, r57397, r57398, r57399, r57400, r57401, r57402, r57403, r57404;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57396);
        mpfr_init_set_str(r57397, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57398, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57399);
        mpfr_init(r57400);
        mpfr_init_set_str(r57401, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57402);
        mpfr_init(r57403);
        mpfr_init(r57404);
}

double f_fm(double x, double y) {
        mpfr_set_d(r57396, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57399, r57397, r57398, MPFR_RNDN);
        mpfr_sub(r57400, r57396, r57399, MPFR_RNDN);
        ;
        mpfr_set_d(r57402, y, MPFR_RNDN);
        mpfr_mul(r57403, r57401, r57402, MPFR_RNDN);
        mpfr_mul(r57404, r57400, r57403, MPFR_RNDN);
        return mpfr_get_d(r57404, MPFR_RNDN);
}

static mpfr_t r57405, r57406, r57407, r57408, r57409, r57410, r57411, r57412, r57413;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57405);
        mpfr_init_set_str(r57406, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57407, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57408);
        mpfr_init(r57409);
        mpfr_init_set_str(r57410, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57411);
        mpfr_init(r57412);
        mpfr_init(r57413);
}

double f_dm(double x, double y) {
        mpfr_set_d(r57405, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57408, r57406, r57407, MPFR_RNDN);
        mpfr_sub(r57409, r57405, r57408, MPFR_RNDN);
        ;
        mpfr_set_d(r57411, y, MPFR_RNDN);
        mpfr_mul(r57412, r57410, r57411, MPFR_RNDN);
        mpfr_mul(r57413, r57409, r57412, MPFR_RNDN);
        return mpfr_get_d(r57413, MPFR_RNDN);
}

