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

char *name = "Distance on a great circle";

double f_if(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r33091 = R;
        float r33092 = 2;
        float r33093 = phi1;
        float r33094 = phi2;
        float r33095 = r33093 - r33094;
        float r33096 = r33095 / r33092;
        float r33097 = sin(r33096);
        float r33098 = pow(r33097, r33092);
        float r33099 = cos(r33093);
        float r33100 = cos(r33094);
        float r33101 = r33099 * r33100;
        float r33102 = lambda1;
        float r33103 = lambda2;
        float r33104 = r33102 - r33103;
        float r33105 = r33104 / r33092;
        float r33106 = sin(r33105);
        float r33107 = r33101 * r33106;
        float r33108 = r33107 * r33106;
        float r33109 = r33098 + r33108;
        float r33110 = sqrt(r33109);
        float r33111 = 1;
        float r33112 = r33111 - r33109;
        float r33113 = sqrt(r33112);
        float r33114 = atan2(r33110, r33113);
        float r33115 = r33092 * r33114;
        float r33116 = r33091 * r33115;
        return r33116;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r33117 = R;
        double r33118 = 2;
        double r33119 = phi1;
        double r33120 = phi2;
        double r33121 = r33119 - r33120;
        double r33122 = r33121 / r33118;
        double r33123 = sin(r33122);
        double r33124 = pow(r33123, r33118);
        double r33125 = cos(r33119);
        double r33126 = cos(r33120);
        double r33127 = r33125 * r33126;
        double r33128 = lambda1;
        double r33129 = lambda2;
        double r33130 = r33128 - r33129;
        double r33131 = r33130 / r33118;
        double r33132 = sin(r33131);
        double r33133 = r33127 * r33132;
        double r33134 = r33133 * r33132;
        double r33135 = r33124 + r33134;
        double r33136 = sqrt(r33135);
        double r33137 = 1;
        double r33138 = r33137 - r33135;
        double r33139 = sqrt(r33138);
        double r33140 = atan2(r33136, r33139);
        double r33141 = r33118 * r33140;
        double r33142 = r33117 * r33141;
        return r33142;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r33143 = R;
        float r33144 = 2;
        float r33145 = phi1;
        float r33146 = r33145 / r33144;
        float r33147 = sin(r33146);
        float r33148 = phi2;
        float r33149 = r33148 / r33144;
        float r33150 = cos(r33149);
        float r33151 = r33147 * r33150;
        float r33152 = cos(r33146);
        float r33153 = sin(r33149);
        float r33154 = r33152 * r33153;
        float r33155 = r33151 - r33154;
        float r33156 = pow(r33155, r33144);
        float r33157 = cos(r33145);
        float r33158 = cos(r33148);
        float r33159 = r33157 * r33158;
        float r33160 = lambda1;
        float r33161 = lambda2;
        float r33162 = r33160 - r33161;
        float r33163 = r33162 / r33144;
        float r33164 = sin(r33163);
        float r33165 = r33159 * r33164;
        float r33166 = r33165 * r33164;
        float r33167 = r33156 + r33166;
        float r33168 = sqrt(r33167);
        float r33169 = 1;
        float r33170 = cbrt(r33164);
        float r33171 = r33170 * r33170;
        float r33172 = r33171 * r33170;
        float r33173 = r33165 * r33172;
        float r33174 = r33156 + r33173;
        float r33175 = r33169 - r33174;
        float r33176 = sqrt(r33175);
        float r33177 = atan2(r33168, r33176);
        float r33178 = r33144 * r33177;
        float r33179 = r33143 * r33178;
        return r33179;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r33180 = R;
        double r33181 = 2;
        double r33182 = phi1;
        double r33183 = r33182 / r33181;
        double r33184 = sin(r33183);
        double r33185 = phi2;
        double r33186 = r33185 / r33181;
        double r33187 = cos(r33186);
        double r33188 = r33184 * r33187;
        double r33189 = cos(r33183);
        double r33190 = sin(r33186);
        double r33191 = r33189 * r33190;
        double r33192 = r33188 - r33191;
        double r33193 = pow(r33192, r33181);
        double r33194 = cos(r33182);
        double r33195 = cos(r33185);
        double r33196 = r33194 * r33195;
        double r33197 = lambda1;
        double r33198 = lambda2;
        double r33199 = r33197 - r33198;
        double r33200 = r33199 / r33181;
        double r33201 = sin(r33200);
        double r33202 = r33196 * r33201;
        double r33203 = r33202 * r33201;
        double r33204 = r33193 + r33203;
        double r33205 = sqrt(r33204);
        double r33206 = 1;
        double r33207 = cbrt(r33201);
        double r33208 = r33207 * r33207;
        double r33209 = r33208 * r33207;
        double r33210 = r33202 * r33209;
        double r33211 = r33193 + r33210;
        double r33212 = r33206 - r33211;
        double r33213 = sqrt(r33212);
        double r33214 = atan2(r33205, r33213);
        double r33215 = r33181 * r33214;
        double r33216 = r33180 * r33215;
        return r33216;
}

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 r33217, r33218, r33219, r33220, r33221, r33222, r33223, r33224, r33225, r33226, r33227, r33228, r33229, r33230, r33231, r33232, r33233, r33234, r33235, r33236, r33237, r33238, r33239, r33240, r33241, r33242;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r33217);
        mpfr_init_set_str(r33218, "2", 10, MPFR_RNDN);
        mpfr_init(r33219);
        mpfr_init(r33220);
        mpfr_init(r33221);
        mpfr_init(r33222);
        mpfr_init(r33223);
        mpfr_init(r33224);
        mpfr_init(r33225);
        mpfr_init(r33226);
        mpfr_init(r33227);
        mpfr_init(r33228);
        mpfr_init(r33229);
        mpfr_init(r33230);
        mpfr_init(r33231);
        mpfr_init(r33232);
        mpfr_init(r33233);
        mpfr_init(r33234);
        mpfr_init(r33235);
        mpfr_init(r33236);
        mpfr_init_set_str(r33237, "1", 10, MPFR_RNDN);
        mpfr_init(r33238);
        mpfr_init(r33239);
        mpfr_init(r33240);
        mpfr_init(r33241);
        mpfr_init(r33242);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r33217, R, MPFR_RNDN);
        ;
        mpfr_set_d(r33219, phi1, MPFR_RNDN);
        mpfr_set_d(r33220, phi2, MPFR_RNDN);
        mpfr_sub(r33221, r33219, r33220, MPFR_RNDN);
        mpfr_div(r33222, r33221, r33218, MPFR_RNDN);
        mpfr_sin(r33223, r33222, MPFR_RNDN);
        mpfr_pow(r33224, r33223, r33218, MPFR_RNDN);
        mpfr_cos(r33225, r33219, MPFR_RNDN);
        mpfr_cos(r33226, r33220, MPFR_RNDN);
        mpfr_mul(r33227, r33225, r33226, MPFR_RNDN);
        mpfr_set_d(r33228, lambda1, MPFR_RNDN);
        mpfr_set_d(r33229, lambda2, MPFR_RNDN);
        mpfr_sub(r33230, r33228, r33229, MPFR_RNDN);
        mpfr_div(r33231, r33230, r33218, MPFR_RNDN);
        mpfr_sin(r33232, r33231, MPFR_RNDN);
        mpfr_mul(r33233, r33227, r33232, MPFR_RNDN);
        mpfr_mul(r33234, r33233, r33232, MPFR_RNDN);
        mpfr_add(r33235, r33224, r33234, MPFR_RNDN);
        mpfr_sqrt(r33236, r33235, MPFR_RNDN);
        ;
        mpfr_sub(r33238, r33237, r33235, MPFR_RNDN);
        mpfr_sqrt(r33239, r33238, MPFR_RNDN);
        mpfr_atan2(r33240, r33236, r33239, MPFR_RNDN);
        mpfr_mul(r33241, r33218, r33240, MPFR_RNDN);
        mpfr_mul(r33242, r33217, r33241, MPFR_RNDN);
        return mpfr_get_d(r33242, MPFR_RNDN);
}

static mpfr_t r33243, r33244, r33245, r33246, r33247, r33248, r33249, r33250, r33251, r33252, r33253, r33254, r33255, r33256, r33257, r33258, r33259, r33260, r33261, r33262, r33263, r33264, r33265, r33266, r33267, r33268, r33269, r33270, r33271, r33272, r33273, r33274, r33275, r33276, r33277, r33278, r33279;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r33243);
        mpfr_init_set_str(r33244, "2", 10, MPFR_RNDN);
        mpfr_init(r33245);
        mpfr_init(r33246);
        mpfr_init(r33247);
        mpfr_init(r33248);
        mpfr_init(r33249);
        mpfr_init(r33250);
        mpfr_init(r33251);
        mpfr_init(r33252);
        mpfr_init(r33253);
        mpfr_init(r33254);
        mpfr_init(r33255);
        mpfr_init(r33256);
        mpfr_init(r33257);
        mpfr_init(r33258);
        mpfr_init(r33259);
        mpfr_init(r33260);
        mpfr_init(r33261);
        mpfr_init(r33262);
        mpfr_init(r33263);
        mpfr_init(r33264);
        mpfr_init(r33265);
        mpfr_init(r33266);
        mpfr_init(r33267);
        mpfr_init(r33268);
        mpfr_init_set_str(r33269, "1", 10, MPFR_RNDN);
        mpfr_init(r33270);
        mpfr_init(r33271);
        mpfr_init(r33272);
        mpfr_init(r33273);
        mpfr_init(r33274);
        mpfr_init(r33275);
        mpfr_init(r33276);
        mpfr_init(r33277);
        mpfr_init(r33278);
        mpfr_init(r33279);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r33243, R, MPFR_RNDN);
        ;
        mpfr_set_d(r33245, phi1, MPFR_RNDN);
        mpfr_div(r33246, r33245, r33244, MPFR_RNDN);
        mpfr_sin(r33247, r33246, MPFR_RNDN);
        mpfr_set_d(r33248, phi2, MPFR_RNDN);
        mpfr_div(r33249, r33248, r33244, MPFR_RNDN);
        mpfr_cos(r33250, r33249, MPFR_RNDN);
        mpfr_mul(r33251, r33247, r33250, MPFR_RNDN);
        mpfr_cos(r33252, r33246, MPFR_RNDN);
        mpfr_sin(r33253, r33249, MPFR_RNDN);
        mpfr_mul(r33254, r33252, r33253, MPFR_RNDN);
        mpfr_sub(r33255, r33251, r33254, MPFR_RNDN);
        mpfr_pow(r33256, r33255, r33244, MPFR_RNDN);
        mpfr_cos(r33257, r33245, MPFR_RNDN);
        mpfr_cos(r33258, r33248, MPFR_RNDN);
        mpfr_mul(r33259, r33257, r33258, MPFR_RNDN);
        mpfr_set_d(r33260, lambda1, MPFR_RNDN);
        mpfr_set_d(r33261, lambda2, MPFR_RNDN);
        mpfr_sub(r33262, r33260, r33261, MPFR_RNDN);
        mpfr_div(r33263, r33262, r33244, MPFR_RNDN);
        mpfr_sin(r33264, r33263, MPFR_RNDN);
        mpfr_mul(r33265, r33259, r33264, MPFR_RNDN);
        mpfr_mul(r33266, r33265, r33264, MPFR_RNDN);
        mpfr_add(r33267, r33256, r33266, MPFR_RNDN);
        mpfr_sqrt(r33268, r33267, MPFR_RNDN);
        ;
        mpfr_cbrt(r33270, r33264, MPFR_RNDN);
        mpfr_mul(r33271, r33270, r33270, MPFR_RNDN);
        mpfr_mul(r33272, r33271, r33270, MPFR_RNDN);
        mpfr_mul(r33273, r33265, r33272, MPFR_RNDN);
        mpfr_add(r33274, r33256, r33273, MPFR_RNDN);
        mpfr_sub(r33275, r33269, r33274, MPFR_RNDN);
        mpfr_sqrt(r33276, r33275, MPFR_RNDN);
        mpfr_atan2(r33277, r33268, r33276, MPFR_RNDN);
        mpfr_mul(r33278, r33244, r33277, MPFR_RNDN);
        mpfr_mul(r33279, r33243, r33278, MPFR_RNDN);
        return mpfr_get_d(r33279, MPFR_RNDN);
}

static mpfr_t r33280, r33281, r33282, r33283, r33284, r33285, r33286, r33287, r33288, r33289, r33290, r33291, r33292, r33293, r33294, r33295, r33296, r33297, r33298, r33299, r33300, r33301, r33302, r33303, r33304, r33305, r33306, r33307, r33308, r33309, r33310, r33311, r33312, r33313, r33314, r33315, r33316;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r33280);
        mpfr_init_set_str(r33281, "2", 10, MPFR_RNDN);
        mpfr_init(r33282);
        mpfr_init(r33283);
        mpfr_init(r33284);
        mpfr_init(r33285);
        mpfr_init(r33286);
        mpfr_init(r33287);
        mpfr_init(r33288);
        mpfr_init(r33289);
        mpfr_init(r33290);
        mpfr_init(r33291);
        mpfr_init(r33292);
        mpfr_init(r33293);
        mpfr_init(r33294);
        mpfr_init(r33295);
        mpfr_init(r33296);
        mpfr_init(r33297);
        mpfr_init(r33298);
        mpfr_init(r33299);
        mpfr_init(r33300);
        mpfr_init(r33301);
        mpfr_init(r33302);
        mpfr_init(r33303);
        mpfr_init(r33304);
        mpfr_init(r33305);
        mpfr_init_set_str(r33306, "1", 10, MPFR_RNDN);
        mpfr_init(r33307);
        mpfr_init(r33308);
        mpfr_init(r33309);
        mpfr_init(r33310);
        mpfr_init(r33311);
        mpfr_init(r33312);
        mpfr_init(r33313);
        mpfr_init(r33314);
        mpfr_init(r33315);
        mpfr_init(r33316);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r33280, R, MPFR_RNDN);
        ;
        mpfr_set_d(r33282, phi1, MPFR_RNDN);
        mpfr_div(r33283, r33282, r33281, MPFR_RNDN);
        mpfr_sin(r33284, r33283, MPFR_RNDN);
        mpfr_set_d(r33285, phi2, MPFR_RNDN);
        mpfr_div(r33286, r33285, r33281, MPFR_RNDN);
        mpfr_cos(r33287, r33286, MPFR_RNDN);
        mpfr_mul(r33288, r33284, r33287, MPFR_RNDN);
        mpfr_cos(r33289, r33283, MPFR_RNDN);
        mpfr_sin(r33290, r33286, MPFR_RNDN);
        mpfr_mul(r33291, r33289, r33290, MPFR_RNDN);
        mpfr_sub(r33292, r33288, r33291, MPFR_RNDN);
        mpfr_pow(r33293, r33292, r33281, MPFR_RNDN);
        mpfr_cos(r33294, r33282, MPFR_RNDN);
        mpfr_cos(r33295, r33285, MPFR_RNDN);
        mpfr_mul(r33296, r33294, r33295, MPFR_RNDN);
        mpfr_set_d(r33297, lambda1, MPFR_RNDN);
        mpfr_set_d(r33298, lambda2, MPFR_RNDN);
        mpfr_sub(r33299, r33297, r33298, MPFR_RNDN);
        mpfr_div(r33300, r33299, r33281, MPFR_RNDN);
        mpfr_sin(r33301, r33300, MPFR_RNDN);
        mpfr_mul(r33302, r33296, r33301, MPFR_RNDN);
        mpfr_mul(r33303, r33302, r33301, MPFR_RNDN);
        mpfr_add(r33304, r33293, r33303, MPFR_RNDN);
        mpfr_sqrt(r33305, r33304, MPFR_RNDN);
        ;
        mpfr_cbrt(r33307, r33301, MPFR_RNDN);
        mpfr_mul(r33308, r33307, r33307, MPFR_RNDN);
        mpfr_mul(r33309, r33308, r33307, MPFR_RNDN);
        mpfr_mul(r33310, r33302, r33309, MPFR_RNDN);
        mpfr_add(r33311, r33293, r33310, MPFR_RNDN);
        mpfr_sub(r33312, r33306, r33311, MPFR_RNDN);
        mpfr_sqrt(r33313, r33312, MPFR_RNDN);
        mpfr_atan2(r33314, r33305, r33313, MPFR_RNDN);
        mpfr_mul(r33315, r33281, r33314, MPFR_RNDN);
        mpfr_mul(r33316, r33280, r33315, MPFR_RNDN);
        return mpfr_get_d(r33316, MPFR_RNDN);
}

