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

char *name = "math.log/1 on complex, real part";

double f_if(float re, float im) {
        float r8940 = re;
        float r8941 = r8940 * r8940;
        float r8942 = im;
        float r8943 = r8942 * r8942;
        float r8944 = r8941 + r8943;
        float r8945 = sqrt(r8944);
        float r8946 = log(r8945);
        return r8946;
}

double f_id(double re, double im) {
        double r8947 = re;
        double r8948 = r8947 * r8947;
        double r8949 = im;
        double r8950 = r8949 * r8949;
        double r8951 = r8948 + r8950;
        double r8952 = sqrt(r8951);
        double r8953 = log(r8952);
        return r8953;
}


double f_of(float re, float im) {
        float r8954 = re;
        float r8955 = -1.6842925293104357e+56f;
        bool r8956 = r8954 <= r8955;
        float r8957 = -r8954;
        float r8958 = log(r8957);
        float r8959 = 2.23777221769595e-209f;
        bool r8960 = r8954 <= r8959;
        float r8961 = 4.820775704044266e-164f;
        bool r8962 = r8954 <= r8961;
        float r8963 = !r8962;
        float r8964 = 2.2709102088224398e+111f;
        bool r8965 = r8954 <= r8964;
        bool r8966 = r8963 && r8965;
        bool r8967 = r8960 || r8966;
        float r8968 = im;
        float r8969 = r8968 * r8968;
        float r8970 = r8954 * r8954;
        float r8971 = r8969 + r8970;
        float r8972 = sqrt(r8971);
        float r8973 = log(r8972);
        float r8974 = log(r8954);
        float r8975 = r8967 ? r8973 : r8974;
        float r8976 = r8956 ? r8958 : r8975;
        return r8976;
}

double f_od(double re, double im) {
        double r8977 = re;
        double r8978 = -1.6842925293104357e+56;
        bool r8979 = r8977 <= r8978;
        double r8980 = -r8977;
        double r8981 = log(r8980);
        double r8982 = 2.23777221769595e-209;
        bool r8983 = r8977 <= r8982;
        double r8984 = 4.820775704044266e-164;
        bool r8985 = r8977 <= r8984;
        double r8986 = !r8985;
        double r8987 = 2.2709102088224398e+111;
        bool r8988 = r8977 <= r8987;
        bool r8989 = r8986 && r8988;
        bool r8990 = r8983 || r8989;
        double r8991 = im;
        double r8992 = r8991 * r8991;
        double r8993 = r8977 * r8977;
        double r8994 = r8992 + r8993;
        double r8995 = sqrt(r8994);
        double r8996 = log(r8995);
        double r8997 = log(r8977);
        double r8998 = r8990 ? r8996 : r8997;
        double r8999 = r8979 ? r8981 : r8998;
        return r8999;
}

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 r9000, r9001, r9002, r9003, r9004, r9005, r9006;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r9000);
        mpfr_init(r9001);
        mpfr_init(r9002);
        mpfr_init(r9003);
        mpfr_init(r9004);
        mpfr_init(r9005);
        mpfr_init(r9006);
}

double f_im(double re, double im) {
        mpfr_set_d(r9000, re, MPFR_RNDN);
        mpfr_mul(r9001, r9000, r9000, MPFR_RNDN);
        mpfr_set_d(r9002, im, MPFR_RNDN);
        mpfr_mul(r9003, r9002, r9002, MPFR_RNDN);
        mpfr_add(r9004, r9001, r9003, MPFR_RNDN);
        mpfr_sqrt(r9005, r9004, MPFR_RNDN);
        mpfr_log(r9006, r9005, MPFR_RNDN);
        return mpfr_get_d(r9006, MPFR_RNDN);
}

static mpfr_t r9007, r9008, r9009, r9010, r9011, r9012, r9013, r9014, r9015, r9016, r9017, r9018, r9019, r9020, r9021, r9022, r9023, r9024, r9025, r9026, r9027, r9028, r9029;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9007);
        mpfr_init_set_str(r9008, "-1.6842925293104357e+56", 10, MPFR_RNDN);
        mpfr_init(r9009);
        mpfr_init(r9010);
        mpfr_init(r9011);
        mpfr_init_set_str(r9012, "2.23777221769595e-209", 10, MPFR_RNDN);
        mpfr_init(r9013);
        mpfr_init_set_str(r9014, "4.820775704044266e-164", 10, MPFR_RNDN);
        mpfr_init(r9015);
        mpfr_init(r9016);
        mpfr_init_set_str(r9017, "2.2709102088224398e+111", 10, MPFR_RNDN);
        mpfr_init(r9018);
        mpfr_init(r9019);
        mpfr_init(r9020);
        mpfr_init(r9021);
        mpfr_init(r9022);
        mpfr_init(r9023);
        mpfr_init(r9024);
        mpfr_init(r9025);
        mpfr_init(r9026);
        mpfr_init(r9027);
        mpfr_init(r9028);
        mpfr_init(r9029);
}

double f_fm(double re, double im) {
        mpfr_set_d(r9007, re, MPFR_RNDN);
        ;
        mpfr_set_si(r9009, mpfr_cmp(r9007, r9008) <= 0, MPFR_RNDN);
        mpfr_neg(r9010, r9007, MPFR_RNDN);
        mpfr_log(r9011, r9010, MPFR_RNDN);
        ;
        mpfr_set_si(r9013, mpfr_cmp(r9007, r9012) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r9015, mpfr_cmp(r9007, r9014) <= 0, MPFR_RNDN);
        mpfr_set_si(r9016, !mpfr_get_si(r9015, MPFR_RNDN), MPFR_RNDN);
        ;
        mpfr_set_si(r9018, mpfr_cmp(r9007, r9017) <= 0, MPFR_RNDN);
        mpfr_set_si(r9019, mpfr_get_si(r9016, MPFR_RNDN) && mpfr_get_si(r9018, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r9020, mpfr_get_si(r9013, MPFR_RNDN) || mpfr_get_si(r9019, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_d(r9021, im, MPFR_RNDN);
        mpfr_mul(r9022, r9021, r9021, MPFR_RNDN);
        mpfr_mul(r9023, r9007, r9007, MPFR_RNDN);
        mpfr_add(r9024, r9022, r9023, MPFR_RNDN);
        mpfr_sqrt(r9025, r9024, MPFR_RNDN);
        mpfr_log(r9026, r9025, MPFR_RNDN);
        mpfr_log(r9027, r9007, MPFR_RNDN);
        if (mpfr_get_si(r9020, MPFR_RNDN)) { mpfr_set(r9028, r9026, MPFR_RNDN); } else { mpfr_set(r9028, r9027, MPFR_RNDN); };
        if (mpfr_get_si(r9009, MPFR_RNDN)) { mpfr_set(r9029, r9011, MPFR_RNDN); } else { mpfr_set(r9029, r9028, MPFR_RNDN); };
        return mpfr_get_d(r9029, MPFR_RNDN);
}

static mpfr_t r9030, r9031, r9032, r9033, r9034, r9035, r9036, r9037, r9038, r9039, r9040, r9041, r9042, r9043, r9044, r9045, r9046, r9047, r9048, r9049, r9050, r9051, r9052;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r9030);
        mpfr_init_set_str(r9031, "-1.6842925293104357e+56", 10, MPFR_RNDN);
        mpfr_init(r9032);
        mpfr_init(r9033);
        mpfr_init(r9034);
        mpfr_init_set_str(r9035, "2.23777221769595e-209", 10, MPFR_RNDN);
        mpfr_init(r9036);
        mpfr_init_set_str(r9037, "4.820775704044266e-164", 10, MPFR_RNDN);
        mpfr_init(r9038);
        mpfr_init(r9039);
        mpfr_init_set_str(r9040, "2.2709102088224398e+111", 10, MPFR_RNDN);
        mpfr_init(r9041);
        mpfr_init(r9042);
        mpfr_init(r9043);
        mpfr_init(r9044);
        mpfr_init(r9045);
        mpfr_init(r9046);
        mpfr_init(r9047);
        mpfr_init(r9048);
        mpfr_init(r9049);
        mpfr_init(r9050);
        mpfr_init(r9051);
        mpfr_init(r9052);
}

double f_dm(double re, double im) {
        mpfr_set_d(r9030, re, MPFR_RNDN);
        ;
        mpfr_set_si(r9032, mpfr_cmp(r9030, r9031) <= 0, MPFR_RNDN);
        mpfr_neg(r9033, r9030, MPFR_RNDN);
        mpfr_log(r9034, r9033, MPFR_RNDN);
        ;
        mpfr_set_si(r9036, mpfr_cmp(r9030, r9035) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r9038, mpfr_cmp(r9030, r9037) <= 0, MPFR_RNDN);
        mpfr_set_si(r9039, !mpfr_get_si(r9038, MPFR_RNDN), MPFR_RNDN);
        ;
        mpfr_set_si(r9041, mpfr_cmp(r9030, r9040) <= 0, MPFR_RNDN);
        mpfr_set_si(r9042, mpfr_get_si(r9039, MPFR_RNDN) && mpfr_get_si(r9041, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r9043, mpfr_get_si(r9036, MPFR_RNDN) || mpfr_get_si(r9042, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_d(r9044, im, MPFR_RNDN);
        mpfr_mul(r9045, r9044, r9044, MPFR_RNDN);
        mpfr_mul(r9046, r9030, r9030, MPFR_RNDN);
        mpfr_add(r9047, r9045, r9046, MPFR_RNDN);
        mpfr_sqrt(r9048, r9047, MPFR_RNDN);
        mpfr_log(r9049, r9048, MPFR_RNDN);
        mpfr_log(r9050, r9030, MPFR_RNDN);
        if (mpfr_get_si(r9043, MPFR_RNDN)) { mpfr_set(r9051, r9049, MPFR_RNDN); } else { mpfr_set(r9051, r9050, MPFR_RNDN); };
        if (mpfr_get_si(r9032, MPFR_RNDN)) { mpfr_set(r9052, r9034, MPFR_RNDN); } else { mpfr_set(r9052, r9051, MPFR_RNDN); };
        return mpfr_get_d(r9052, MPFR_RNDN);
}

