Пример #1
0
struct Cyc_APQ_T*Cyc_reduce(struct Cyc_APQ_T*q){struct Cyc_APQ_T*_T0;struct Cyc_AP_T*_T1;struct Cyc_AP_T*_T2;int _T3;struct Cyc_APQ_T*_T4;struct Cyc_APQ_T*_T5;struct Cyc_AP_T*_T6;struct Cyc_APQ_T*_T7;struct Cyc_APQ_T*_T8;struct Cyc_AP_T*_T9;struct Cyc_APQ_T*_TA;struct Cyc_AP_T*_TB;struct Cyc_AP_T*_TC;struct Cyc_APQ_T*_TD;struct Cyc_AP_T*_TE;int _TF;struct Cyc_APQ_T*_T10;void*_T11;struct Cyc_APQ_T*_T12;struct Cyc_APQ_T*_T13;struct Cyc_AP_T*_T14;struct Cyc_AP_T*_T15;struct Cyc_APQ_T*_T16;struct Cyc_APQ_T*_T17;struct Cyc_AP_T*_T18;struct Cyc_AP_T*_T19;struct Cyc_APQ_T*_T1A;_T0=
_check_null(q);_T1=_T0->d;_T2=Cyc_AP_zero;_T3=Cyc_AP_cmp(_T1,_T2);if(_T3 >= 0)goto _TL0;_T4=q;_T5=q;_T6=_T5->d;
_T4->d=Cyc_AP_neg(_T6);_T7=q;_T8=q;_T9=_T8->n;
_T7->n=Cyc_AP_neg(_T9);goto _TL1;_TL0: _TL1: _TA=q;_TB=_TA->n;_TC=
# 18
Cyc_AP_abs(_TB);_TD=q;_TE=_TD->d;{struct Cyc_AP_T*gcd=Cyc_AP_gcd(_TC,_TE);_TF=
Cyc_AP_cmp(gcd,Cyc_AP_one);if(_TF!=0)goto _TL2;_T10=q;
return _T10;_TL2: _T11=_cycalloc(sizeof(struct Cyc_APQ_T));{
struct Cyc_APQ_T*newq=(struct Cyc_APQ_T*)_T11;_T12=newq;_T13=q;_T14=_T13->n;_T15=gcd;
_T12->n=Cyc_AP_div(_T14,_T15);_T16=newq;_T17=q;_T18=_T17->d;_T19=gcd;
_T16->d=Cyc_AP_div(_T18,_T19);_T1A=newq;
return _T1A;}}}
Пример #2
0
struct Cyc_APQ_T * Cyc_APQ_fromAP(struct Cyc_AP_T * n,struct Cyc_AP_T * d) {
    int _T0;
    struct Cyc_Invalid_argument_exn_struct * _T1;
    void * _T2;
    void * _T3;
    struct Cyc_APQ_T * _T4;
    struct Cyc_APQ_T * _T5;
    struct Cyc_APQ_T * _T6;
    _T0 = Cyc_AP_cmp(d,Cyc_AP_zero);
    if (_T0 != 0) {
        goto _TL4;
    }
    {   struct Cyc_Invalid_argument_exn_struct * _T7 = _cycalloc(sizeof(struct Cyc_Invalid_argument_exn_struct));
        _T7->tag = Cyc_Invalid_argument;
        _T7->f1 = _tag_fat("APQ_fromAP: divide by zero",sizeof(char),27U);
        _T1 = (struct Cyc_Invalid_argument_exn_struct *)_T7;
    }
    _T2 = (void *)_T1;
    _throw(_T2);
    goto _TL5;
_TL4:
_TL5:
    _T3 = _cycalloc(sizeof(struct Cyc_APQ_T));
    {   struct Cyc_APQ_T * q = (struct Cyc_APQ_T *)_T3;
        _T4 = q;
        _T4->n = n;
        _T5 = q;
        _T5->d = d;
        _T6 = Cyc_reduce(q);
        return _T6;
    }
}
Пример #3
0
struct Cyc_APQ_T*Cyc_APQ_fromstr(struct _fat_ptr str,int base){void*_T0;struct _fat_ptr _T1;unsigned char*_T2;const char*_T3;char _T4;int _T5;struct _fat_ptr _T6;unsigned char*_T7;const char*_T8;char _T9;int _TA;struct _fat_ptr*_TB;struct Cyc_APQ_T*_TC;struct _fat_ptr _TD;unsigned char*_TE;const char*_TF;int _T10;struct _fat_ptr _T11;unsigned char*_T12;const char*_T13;char _T14;int _T15;struct _fat_ptr _T16;struct _fat_ptr _T17;unsigned char*_T18;const char*_T19;int _T1A;int _T1B;struct Cyc_APQ_T*_T1C;struct Cyc_Invalid_argument_exn_struct*_T1D;void*_T1E;struct Cyc_APQ_T*_T1F;struct Cyc_APQ_T*_T20;_T0=_cycalloc(sizeof(struct Cyc_APQ_T));{
struct Cyc_APQ_T*q=(struct Cyc_APQ_T*)_T0;
struct _fat_ptr s=str;
_TL6: _T1=s;_T2=_check_fat_subscript(_T1,sizeof(char),0U);_T3=(const char*)_T2;_T4=*_T3;_T5=(int)_T4;if(_T5)goto _TL9;else{goto _TL8;}_TL9: _T6=s;_T7=_T6.curr;_T8=(const char*)_T7;_T9=*_T8;_TA=(int)_T9;if(_TA!=47)goto _TL7;else{goto _TL8;}_TL7: _TB=& s;_fat_ptr_inplace_plus(_TB,sizeof(char),1);goto _TL6;_TL8: _TC=q;_TD=str;_TE=_untag_fat_ptr_check_bound(_TD,sizeof(char),1U);_TF=(const char*)_TE;_T10=base;
_TC->n=Cyc_AP_fromstr(_TF,_T10);_T11=s;_T12=_T11.curr;_T13=(const char*)_T12;_T14=*_T13;_T15=(int)_T14;
if(!_T15)goto _TLA;_T16=s;_T17=
_fat_ptr_plus(_T16,sizeof(char),1);_T18=_untag_fat_ptr_check_bound(_T17,sizeof(char),1U);_T19=(const char*)_T18;_T1A=base;{struct Cyc_AP_T*d=Cyc_AP_fromstr(_T19,_T1A);_T1B=
Cyc_AP_cmp(d,Cyc_AP_zero);if(!_T1B)goto _TLC;_T1C=q;
_T1C->d=d;goto _TLD;
_TLC:{struct Cyc_Invalid_argument_exn_struct*_T21=_cycalloc(sizeof(struct Cyc_Invalid_argument_exn_struct));_T21->tag=Cyc_Invalid_argument;_T21->f1=_tag_fat("APQ_fromstr: malformed string",sizeof(char),30U);_T1D=(struct Cyc_Invalid_argument_exn_struct*)_T21;}_T1E=(void*)_T1D;_throw(_T1E);_TLD:;}goto _TLB;
# 54
_TLA: _T1F=q;_T1F->d=Cyc_AP_one;_TLB: _T20=
Cyc_reduce(q);return _T20;}}
Пример #4
0
struct Cyc_APQ_T * Cyc_APQ_div(struct Cyc_APQ_T * p,struct Cyc_APQ_T * q) {
    struct Cyc_APQ_T * _T0;
    struct Cyc_AP_T * _T1;
    struct Cyc_AP_T * _T2;
    int _T3;
    struct Cyc_Invalid_argument_exn_struct * _T4;
    void * _T5;
    struct Cyc_APQ_T * _T6;
    struct Cyc_AP_T * _T7;
    struct Cyc_APQ_T * _T8;
    struct Cyc_AP_T * _T9;
    struct Cyc_AP_T * _TA;
    struct Cyc_APQ_T * _TB;
    struct Cyc_AP_T * _TC;
    struct Cyc_APQ_T * _TD;
    struct Cyc_AP_T * _TE;
    struct Cyc_AP_T * _TF;
    struct Cyc_APQ_T * _T10;
    _T0 = _check_null(q);
    _T1 = _T0->n;
    _T2 = Cyc_AP_zero;
    _T3 = Cyc_AP_cmp(_T1,_T2);
    if (_T3 != 0) {
        goto _TL10;
    }
    {   struct Cyc_Invalid_argument_exn_struct * _T11 = _cycalloc(sizeof(struct Cyc_Invalid_argument_exn_struct));
        _T11->tag = Cyc_Invalid_argument;
        _T11->f1 = _tag_fat("APQ_div: divide by zero",sizeof(char),24U);
        _T4 = (struct Cyc_Invalid_argument_exn_struct *)_T11;
    }
    _T5 = (void *)_T4;
    _throw(_T5);
    goto _TL11;
_TL10:
_TL11:
    _T6 = _check_null(p);
    _T7 = _T6->n;
    _T8 = q;
    _T9 = _T8->d;
    _TA = Cyc_AP_mul(_T7,_T9);
    _TB = p;
    _TC = _TB->d;
    _TD = q;
    _TE = _TD->n;
    _TF = Cyc_AP_mul(_TC,_TE);
    _T10 = Cyc_APQ_fromAP(_TA,_TF);
    return _T10;
}
Пример #5
0
int Cyc_APQ_cmp(struct Cyc_APQ_T * p,struct Cyc_APQ_T * q) {
    struct Cyc_APQ_T * _T0;
    struct Cyc_AP_T * _T1;
    struct Cyc_APQ_T * _T2;
    struct Cyc_AP_T * _T3;
    struct Cyc_AP_T * _T4;
    struct Cyc_APQ_T * _T5;
    struct Cyc_AP_T * _T6;
    struct Cyc_AP_T * _T7;
    struct Cyc_APQ_T * _T8;
    struct Cyc_AP_T * _T9;
    struct Cyc_APQ_T * _TA;
    struct Cyc_AP_T * _TB;
    struct Cyc_AP_T * _TC;
    struct Cyc_AP_T * _TD;
    struct Cyc_APQ_T * _TE;
    struct Cyc_AP_T * _TF;
    struct Cyc_AP_T * _T10;
    struct Cyc_AP_T * _T11;
    int _T12;
    _T0 = _check_null(p);
    _T1 = _T0->d;
    _T2 = _check_null(q);
    _T3 = _T2->d;
    {   struct Cyc_AP_T * d = Cyc_AP_lcm(_T1,_T3);
        _T4 = d;
        _T5 = p;
        _T6 = _T5->d;
        {   struct Cyc_AP_T * px = Cyc_AP_div(_T4,_T6);
            _T7 = d;
            _T8 = q;
            _T9 = _T8->d;
            {   struct Cyc_AP_T * qx = Cyc_AP_div(_T7,_T9);
                _TA = p;
                _TB = _TA->n;
                _TC = px;
                _TD = Cyc_AP_mul(_TB,_TC);
                _TE = q;
                _TF = _TE->n;
                _T10 = qx;
                _T11 = Cyc_AP_mul(_TF,_T10);
                _T12 = Cyc_AP_cmp(_TD,_T11);
                return _T12;
            }
        }
    }
}
Пример #6
0
struct _fat_ptr Cyc_APQ_tostr(struct Cyc_APQ_T*q,int base){struct Cyc_APQ_T*_T0;struct Cyc_AP_T*_T1;struct Cyc_AP_T*_T2;int _T3;struct _fat_ptr _T4;struct Cyc_APQ_T*_T5;struct Cyc_AP_T*_T6;int _T7;void*_T8;void*_T9;unsigned _TA;struct _fat_ptr _TB;struct Cyc_String_pa_PrintArg_struct _TC;struct _fat_ptr _TD;struct Cyc_APQ_T*_TE;struct Cyc_AP_T*_TF;int _T10;void*_T11;void*_T12;unsigned _T13;struct Cyc_String_pa_PrintArg_struct _T14;struct _fat_ptr _T15;struct Cyc_APQ_T*_T16;struct Cyc_AP_T*_T17;int _T18;void*_T19;void*_T1A;unsigned _T1B;struct _fat_ptr _T1C;struct _fat_ptr _T1D;_T0=
_check_null(q);_T1=_T0->d;_T2=Cyc_AP_one;_T3=Cyc_AP_cmp(_T1,_T2);if(_T3!=0)goto _TLE;_T5=q;_T6=_T5->n;_T7=base;{char*_T1E=
Cyc_AP_tostr(_T6,_T7);_T8=(void*)_T1E;_T9=(void*)_T1E;_TA=_get_zero_arr_size_char(_T9,1U);_T4=_tag_fat(_T8,sizeof(char),_TA);}return _T4;_TLE:{struct Cyc_String_pa_PrintArg_struct _T1E;_T1E.tag=0;_TE=q;_TF=_TE->n;_T10=base;{char*_T1F=
Cyc_AP_tostr(_TF,_T10);_T11=(void*)_T1F;_T12=(void*)_T1F;_T13=_get_zero_arr_size_char(_T12,1U);_TD=_tag_fat(_T11,sizeof(char),_T13);}_T1E.f1=_TD;_TC=_T1E;}{struct Cyc_String_pa_PrintArg_struct _T1E=_TC;{struct Cyc_String_pa_PrintArg_struct _T1F;_T1F.tag=0;_T16=q;_T17=_T16->d;_T18=base;{char*_T20=Cyc_AP_tostr(_T17,_T18);_T19=(void*)_T20;_T1A=(void*)_T20;_T1B=_get_zero_arr_size_char(_T1A,1U);_T15=_tag_fat(_T19,sizeof(char),_T1B);}_T1F.f1=_T15;_T14=_T1F;}{struct Cyc_String_pa_PrintArg_struct _T1F=_T14;void*_T20[2];_T20[0]=& _T1E;_T20[1]=& _T1F;_T1C=_tag_fat("%s/%s",sizeof(char),6U);_T1D=_tag_fat(_T20,sizeof(void*),2);_TB=Cyc_aprintf(_T1C,_T1D);}}return _TB;}