FPINT {
ADD (e1) (e2) (e3) , <BR 'PX=' e3>:ex = <FPADD (e1) e2 >;
SUB (e1) (e2) (e3) , <BR 'PX=' e3>:ex = <FPSUB (e1) e2 >;
MUL (e1) (e2) (e3) , <BR 'PX=' e3>:ex = <FPMUL (e1) e2 >;
DIV (e1) (e2) (e3) , <BR 'PX=' e3>:ex = <FPDIV (e1) e2 >;
INV (e1) (e3) , <BR 'PX=' e3>:ex = <FPINV e1 >;
}
* Сложение
FPADD { (e1) e2 = <COKP <FPADD1 (e1) e2>>; }
FPADD1 {
(e1 (e2)) e3 (e4) = <FPADD1 (e1) e3> <PADD (e2) (e4)>;
(e1) e2 = e1 e2;
}
COKP { e1 = e1; }
* Вычитание
FPSUB { (e1) e2 = <COKP <FPSUB1 (e1) e2>>; }
FPSUB1 {
(e1 (e2)) e3 (e4) = <FPSUB1 (e1) e3> <PSUB (e2) (e4)>;
(e1) = e1;
( ) e2 = <FPSUB1 ( (0) ) e2 >;
}
* Умножение
FPMUL {
(e1) = ;
( ) e2 = ;
(e1) e2, <CP 'PX'>: e.PX = <FPMUL9
<FPDO (<FPM ( ) (e1) e2>) e.PX >>;
}
FPMUL9 { e0 (eR) = eR; }
FPM {
(e1) (e2) = e1;
(e1) (e2) (e3) e4 = <FPM (<FPADD (<FPX e1>)
<FPMQ (e2) (e3)>>) (e2) e4>;
}
FPX { = ;
e1 = e1 (0);
}
FPMQ {
(e1) = ;
((e1) e2) (e3) = <PMUL (e1) (e3)> <FPMQ (e2) (e3)>;
( ) (e3) = ;
}
* Деление с остатком
FPDO {
( ) e1 = ( );
(e1) e2 = <FPDOA ( ) (e1) ( ) (e2)>;
}
FPDOA {
(e1) ((e2) e3) (e4) ((e5) e6) =
<FPDOA (e1 (e2)) (e3) (e4 (e5)) (e6)>;
(e1) ( ) (e4) ((e5) e6) = (e1);
(e1) (e2) (e4) () = <FPDOB (e1) (e2) (e4)>;
}
FPDOB {
((e1) e2) (e3) ((e4) e5) =
<FPDOC <PDR (e1) (e4)> ((e1) e2) (e3) ((e4) e5)>;
}
FPDOC {
(e1) ((ex) e2) (e3) ((ey) e4) = (e1) <FPDOD
( <FPSUB1 (e2) <FPMQ (e4) (e1)>> )
(e3) ((ey) e4) >;
}
FPDOD {
(e1) ( ) (e4) = ( <COKP e1> );
(e1) ((e2) e3) (e4) = <FPDOB (e1 (e2)) (e3) (e4)>;
}
* -------------------------------------------------
PADD { (e1) (e2) , <Q_add (e1) e2> : e3 = (e3) ; }
PSUB { (e1) (e2) , <Q_sub (e1) e2> : e3 = (e3) ; }
PMUL { (e1) (e2) , <Q_mul (e1) e2> : e3 = (e3) ; }
PDR { (e1) (e2) , <Q_div (e1) e2> : e3 = (e3) ; }
* -------------------------------------------------
* Обратный элемент
FPINV { eM, <CP 'PX' >: e.PX = <FPINV1 (e.PX) ( ) (eM) (( 1 )) >; }
FPINV1 {
(eA) (eX) ((e.S)) (eJ) = <FPINV7 (eJ) (e.S)>;
(eA) (eX) (eB) (eJ) = <FPINV1 (eB) (eJ)
<FPINV2 (eX) (eJ) <FPDO (eA) eB>>>;
}
FPINV2 {
(eX) (eJ) eQ (eR) = (eR) (<FPSUB (eX) <FPMUL (eJ) eQ >>);
}
FPINV7 {
((e1) e2) (e3) = <PDR (e1) (e3)> <FPINV7 (e2) (e3)>;
( ) (e3) = ;
}
FPDIV { (e1) e2 = <FPMUL (e1) <FPINV e2>>; }
*