#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 r57205 = x;
        float r57206 = 16.0;
        float r57207 = 116.0;
        float r57208 = r57206 / r57207;
        float r57209 = r57205 - r57208;
        float r57210 = 3.0;
        float r57211 = r57209 * r57210;
        float r57212 = y;
        float r57213 = r57211 * r57212;
        return r57213;
}

double f_id(double x, double y) {
        double r57214 = x;
        double r57215 = 16.0;
        double r57216 = 116.0;
        double r57217 = r57215 / r57216;
        double r57218 = r57214 - r57217;
        double r57219 = 3.0;
        double r57220 = r57218 * r57219;
        double r57221 = y;
        double r57222 = r57220 * r57221;
        return r57222;
}


double f_of(float x, float y) {
        float r57223 = x;
        float r57224 = 16.0;
        float r57225 = 116.0;
        float r57226 = r57224 / r57225;
        float r57227 = r57223 - r57226;
        float r57228 = 3.0;
        float r57229 = y;
        float r57230 = r57228 * r57229;
        float r57231 = r57227 * r57230;
        return r57231;
}

double f_od(double x, double y) {
        double r57232 = x;
        double r57233 = 16.0;
        double r57234 = 116.0;
        double r57235 = r57233 / r57234;
        double r57236 = r57232 - r57235;
        double r57237 = 3.0;
        double r57238 = y;
        double r57239 = r57237 * r57238;
        double r57240 = r57236 * r57239;
        return r57240;
}

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 r57241, r57242, r57243, r57244, r57245, r57246, r57247, r57248, r57249;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57241);
        mpfr_init_set_str(r57242, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57243, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57244);
        mpfr_init(r57245);
        mpfr_init_set_str(r57246, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57247);
        mpfr_init(r57248);
        mpfr_init(r57249);
}

double f_im(double x, double y) {
        mpfr_set_d(r57241, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57244, r57242, r57243, MPFR_RNDN);
        mpfr_sub(r57245, r57241, r57244, MPFR_RNDN);
        ;
        mpfr_mul(r57247, r57245, r57246, MPFR_RNDN);
        mpfr_set_d(r57248, y, MPFR_RNDN);
        mpfr_mul(r57249, r57247, r57248, MPFR_RNDN);
        return mpfr_get_d(r57249, MPFR_RNDN);
}

static mpfr_t r57250, r57251, r57252, r57253, r57254, r57255, r57256, r57257, r57258;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57250);
        mpfr_init_set_str(r57251, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57252, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57253);
        mpfr_init(r57254);
        mpfr_init_set_str(r57255, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57256);
        mpfr_init(r57257);
        mpfr_init(r57258);
}

double f_fm(double x, double y) {
        mpfr_set_d(r57250, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57253, r57251, r57252, MPFR_RNDN);
        mpfr_sub(r57254, r57250, r57253, MPFR_RNDN);
        ;
        mpfr_set_d(r57256, y, MPFR_RNDN);
        mpfr_mul(r57257, r57255, r57256, MPFR_RNDN);
        mpfr_mul(r57258, r57254, r57257, MPFR_RNDN);
        return mpfr_get_d(r57258, MPFR_RNDN);
}

static mpfr_t r57259, r57260, r57261, r57262, r57263, r57264, r57265, r57266, r57267;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57259);
        mpfr_init_set_str(r57260, "16.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57261, "116.0", 10, MPFR_RNDN);
        mpfr_init(r57262);
        mpfr_init(r57263);
        mpfr_init_set_str(r57264, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57265);
        mpfr_init(r57266);
        mpfr_init(r57267);
}

double f_dm(double x, double y) {
        mpfr_set_d(r57259, x, MPFR_RNDN);
        ;
        ;
        mpfr_div(r57262, r57260, r57261, MPFR_RNDN);
        mpfr_sub(r57263, r57259, r57262, MPFR_RNDN);
        ;
        mpfr_set_d(r57265, y, MPFR_RNDN);
        mpfr_mul(r57266, r57264, r57265, MPFR_RNDN);
        mpfr_mul(r57267, r57263, r57266, MPFR_RNDN);
        return mpfr_get_d(r57267, MPFR_RNDN);
}

