[BACK]Return to cmo-basic1.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc / OpenXM-specs

Diff for /OpenXM/doc/OpenXM-specs/cmo-basic1.tex between version 1.1.1.1 and 1.14

version 1.1.1.1, 2000/01/20 08:52:46 version 1.14, 2015/08/18 02:54:05
Line 1 
Line 1 
 %% $OpenXM$  %% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.13 2005/03/04 03:49:47 takayama Exp $
 //&jp \section{ 数, 多項式 の  CMO 表現 }  //&jp \section{ 数, 多項式 の  CMO 表現 }
 //&eg \section{ CMOexpressions for numbers and polynomials }  //&eg \section{ CMOexpressions for numbers and polynomials }
   \label{sec:basic1}
 /*&C  /*&C
 @../SSkan/plugin/cmotag.h  @../SSkan/plugin/cmotag.h
 \begin{verbatim}  \begin{verbatim}
Line 14 
Line 14 
 #define     CMO_RING_BY_NAME   26  #define     CMO_RING_BY_NAME   26
 #define     CMO_DISTRIBUTED_POLYNOMIAL 31  #define     CMO_DISTRIBUTED_POLYNOMIAL 31
 #define     CMO_RATIONAL       34  #define     CMO_RATIONAL       34
   #define     CMO_COMPLEX       35
   
   
 #define     CMO_INDETERMINATE  60  #define     CMO_INDETERMINATE  60
Line 24 
Line 25 
 */  */
   
 /*&jp  /*&jp
 以下, グループ CMObject/Basic1, CMObject/Tree  以下, グループ CMObject/Basic, CMObject/Tree
 および CMObject/DistributedPolynomial  および CMObject/DistributedPolynomial
 に属する CMObject の形式を説明する.  に属する CMObject の形式を説明する.
 \noroa{ tagged list を導入すべきか?  cf. SSkan/plugin/cmo.txt }  
   
   \noindent
   {\tt OpenXM/src/ox\_toolkit} にある {\tt bconv} をもちいると
   CMO expression を binary format に変換できるので,
   これを参考にするといい.
 */  */
 /*&eg  /*&eg
 In the sequel, we will explain on the groups  In the sequel, we will explain on the groups
 CMObject/Basic1, CMObject/Tree  CMObject/Basic, CMObject/Tree
 and CMObject/DistributedPolynomial.  and CMObject/DistributedPolynomial.
   
   \noindent
   The program {\tt bconv} at {\tt OpenXM/src/ox\_toolkit}
   translates
   CMO expressions into binary formats.
   It is convinient to understand the binary formats explained in
   this section.
 */  */
   
   /*&C
   \noindent Example:
   \begin{verbatim}
   bash$ ./bconv
   > (CMO_ZZ,123123);
   00 00 00 14 00 00 00 01 00 01 e0 f3
   \end{verbatim}
   */
 /*&jp  /*&jp
   
 \bigbreak  \bigbreak
 \noindent  \noindent
 Group CMObject/Basic1 requires CMObject/Basic0. \\  Group CMObject/Basic requires CMObject/Primitive. \\
 ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/Basic1. \\  ZZ, QQ, Zero, Rational, Indeterminate $\in$ CMObject/Basic. \\
 \begin{eqnarray*}  \begin{eqnarray*}
 \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\  \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\
 & & \mbox{ --- ユニバーサルな ゼロを表す. } \\  & & \mbox{ --- ユニバーサルな ゼロを表す. } \\
 \mbox{ZZ}         &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots  \mbox{ZZ}         &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots ,
 {\sl byte}\, \mbox{a[m]} ) \\  {\sl byte}\, \mbox{a[$|$f$|$]} ) \\
 &:& \mbox{ --- bignum をあらわす. a[i] についてはあとで説明}\\  &:& \mbox{ --- bignum をあらわす. a[i] についてはあとで説明}\\
 \mbox{QQ}        &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\  \mbox{QQ}        &:& ({\tt CMO\_QQ},
                         {\sl int32}\, {\rm m}, {\sl byte}\, \mbox{a[1]}, \ldots, {\sl byte}\, \mbox{a[$|$m$|$]},
                         {\sl int32}\, {\rm n}, {\sl byte}\, \mbox{b[1]}, \ldots, {\sl byte}\, \mbox{b[$|$n$|$]})\\
 & & \mbox{ --- 有理数 $a/b$ を表す. } \\  & & \mbox{ --- 有理数 $a/b$ を表す. } \\
 \mbox{Rational}        &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\  \mbox{Rational}        &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\
 & & \mbox{ ---  $a/b$ を表す. } \\  & & \mbox{ ---  $a/b$ を表す. } \\
   \mbox{Bigfloat}         &:& ({\tt CMO\_BIGFLOAT},
   {\sl int32}\, {\rm sign}, {\sl int32}\, {\rm prec}, {\sl int64}\, {\rm exp},
   {\sl int32}\, \mbox{a[1]}, \ldots , {\sl int32}\, \mbox{a[$\lfloor \frac{{\rm prec}+31}{32} \rfloor$]} ) \\
   &:& \mbox{ --- bigfloat をあらわす. a[i] についてはあとで説明}\\
   \mbox{Complex}        &:& ({\tt CMO\_COMPLEX}, {\sl CMObject}\, {\rm re}, {\sl CMObject}\, {\rm im}) \\
   & & \mbox{ ---  $a+b\sqrt{-1}$ を表す. } \\
 \mbox{Indeterminate}        &:& ({\tt CMO\_INDETERMINATE}, {\sl Cstring}\, {\rm v}) \\  \mbox{Indeterminate}        &:& ({\tt CMO\_INDETERMINATE}, {\sl Cstring}\, {\rm v}) \\
 & & \mbox{ --- 変数名 $v$ . } \\  & & \mbox{ --- 変数名 $v$ . } \\
 \end{eqnarray*}  \end{eqnarray*}
 */  */
   
   
 /*&eg  /*&eg
   
 \bigbreak  \bigbreak
 \noindent  \noindent
 Group CMObject/Basic1 requires CMObject/Basic0. \\  Group CMObject/Basic requires CMObject/Primitive. \\
 ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/Basic1. \\  ZZ, QQ, Zero, Rational, Indeterminate $\in$ CMObject/Basic. \\
 \begin{eqnarray*}  \begin{eqnarray*}
 \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\  \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\
 & & \mbox{ --- Universal zero } \\  & & \mbox{ --- Universal zero } \\
 \mbox{ZZ}         &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots  \mbox{ZZ}         &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots ,
 {\sl byte}\, \mbox{a[m]} ) \\  {\sl byte}\, \mbox{a[$|$m$|$]} ) \\
 &:& \mbox{ --- bignum. The meaning of a[i] will be explained later.}\\  &:& \mbox{ --- bignum. The meaning of a[i] will be explained later.}\\
 \mbox{QQ}        &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\  \mbox{QQ}        &:& ({\tt CMO\_QQ},
                         {\sl int32}\, {\rm m}, {\sl byte}\, \mbox{a[1]}, \ldots, {\sl byte}\, \mbox{a[$|$m$|$]},
                         {\sl int32}\, {\rm n}, {\sl byte}\, \mbox{b[1]}, \ldots, {\sl byte}\, \mbox{b[$|$n$|$]})\\
 & & \mbox{ --- Rational number $a/b$. } \\  & & \mbox{ --- Rational number $a/b$. } \\
 \mbox{Rational}        &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\  \mbox{Rational}        &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\
 & & \mbox{ ---  Rational expression $a/b$. } \\  & & \mbox{ ---  Rational expression $a/b$. } \\
   \mbox{Bigfloat}         &:& ({\tt CMO\_BIGFLOAT},
   {\sl int32}\, {\rm sign}, {\sl int32}\, {\rm prec}, {\sl int64}\, {\rm exp},
   {\sl int32}\, \mbox{a[1]}, \ldots , {\sl int32}\, \mbox{a[$\lfloor \frac{{\rm prec}+31}{32} \rfloor$]} ) \\
   &:& \mbox{ --- bignfloat. The meaning of a[i] will be explained later.}\\
   \mbox{Complex}        &:& ({\tt CMO\_COMPLEX}, {\sl CMObject}\, {\rm re}, {\sl CMObject}\, {\rm im}) \\
   & & \mbox{ ---  Complex number $a+b\sqrt{-1}$. } \\
 \mbox{Indeterminate}        &:& ({\tt CMO\_INDETERMINATE}, {\sl Cstring}\, {\rm v}) \\  \mbox{Indeterminate}        &:& ({\tt CMO\_INDETERMINATE}, {\sl Cstring}\, {\rm v}) \\
 & & \mbox{ --- Variable name $v$ . } \\  & & \mbox{ --- Variable name $v$ . } \\
 \end{eqnarray*}  \end{eqnarray*}
Line 79  ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B
Line 116  ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B
 /*&C  /*&C
   
 */  */
   /*&C
   
   */
   
 /*&jp  /*&jp
 Indeterminate は変数名をあらわす.  Indeterminate は変数名をあらわす.
 v はバイト列であればなにを用いてもよいが,  v はバイト列であればなにを用いてもよいが,
Line 92  escape sequence を用いて実現するのは, 無理があるようで
Line 132  escape sequence を用いて実現するのは, 無理があるようで
 テーブルを作成する必要があるであろう.)  テーブルを作成する必要があるであろう.)
 */  */
 /*&eg  /*&eg
 Indeterminate is a name of a variable.  The name of a variable should be expressed by using Indeterminate.
 v may be any sequence of bytes, but each system has its own  v may be any sequence of bytes, but each system has its own
 restrictions on the names of variables.  restrictions on the names of variables.
 Indeterminates of CMO and internal variable names must be translated  Indeterminates of CMO and internal variable names must be translated
 in one to one correspondence.  in one-to-one correspondence.
 */  */
   
   
 /*&jp  /*&jp
   \subsection{Indeterminate および Tree}
   
 \noindent  \noindent
 Group CMObject/Tree requires CMObject/Basic1. \\  Group CMObject/Tree requires CMObject/Basic. \\
 Tree, Lambda $\in$ CMObject/Basic1. \\  Tree, Lambda $\in$ CMObject/Tree. \\
 \begin{eqnarray*}  \begin{eqnarray*}
 \mbox{Tree}        &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name},  \mbox{Tree}        &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name},
  {\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\   {\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\
 & & \mbox{ --- 名前 name の定数または関数. 関数の評価はおこなわない. } \\  & & \mbox{ --- 名前 name の定数または関数. 関数の評価はおこなわない. } \\
 & & \mbox{ --- cdname は空文字列でなければ name の意味が説明されている }\\  & & \mbox{ --- attributes は空リストでなければ name の属性を保持している. }\\
 & & \mbox{ --- OpenMath CD (content dictionary) の名前. } \\  & & \mbox{ --- 属性リストは, key と 値のペアである. }\\
 \mbox{Lambda}        &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args},  \mbox{Lambda}        &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args},
                           {\sl Tree} {\rm body}) \\                            {\sl Tree} {\rm body}) \\
 & & \mbox{ --- body を args を引数とする関数とする. } \\  & & \mbox{ --- body を args を引数とする関数とする. } \\
 & & \mbox{ --- optional な引数が必要なときは, leaves の後へつづける.} \\  
 \end{eqnarray*}  \end{eqnarray*}
 */  */
 /*&eg  /*&eg
   \subsection{Indeterminate and Tree}
   
 \noindent  \noindent
 Group CMObject/Tree requires CMObject/Basic1. \\  Group CMObject/Tree requires CMObject/Basic. \\
 Tree, Lambda $\in$ CMObject/Basic1. \\  Tree, Lambda $\in$ CMObject/Tree. \\
 \begin{eqnarray*}  \begin{eqnarray*}
 \mbox{Tree}        &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name},  \mbox{Tree}        &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name},
  {\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\   {\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\
 & & \mbox{ --- A function or a constant of name. Functions are not evaluated. } \\  & & \mbox{ --- ``name'' is the name of the node of the tree. } \\
 & & \mbox{ --- cdname may be a null. If it is not null, it is the name of}\\  & & \mbox{ --- Attributes may be a null list. If it is not null, it is a list of}\\
 & & \mbox{ --- the OpenMath CD (content dictionary). } \\  & & \mbox{ --- key and value pairs. } \\
 \mbox{Lambda}        &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args},  \mbox{Lambda}        &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args},
                           {\sl Tree} {\rm body}) \\                            {\sl Tree} {\rm body}) \\
 & & \mbox{ --- a function with the arguments body. } \\  & & \mbox{ --- a function with the arguments body. } \\
 & & \mbox{ --- optional arguments come after leaves.} \\  
 \end{eqnarray*}  \end{eqnarray*}
 */  */
   
 /*&C  
   
 */  
   
 /*&jp  /*&jp
 数式を処理するシステムでは, Tree 構造が一般にもちいられる.  数式を処理するシステムでは, Tree 構造が一般にもちいられる.
 たとえば, $\sin(x+e)$ は,  たとえば, $\sin(x+e)$ は,
Line 164  For example,
Line 201  For example,
 $\sin(x+e)$ is expressed as  $\sin(x+e)$ is expressed as
 {\tt (sin, (plus, x, e))}  {\tt (sin, (plus, x, e))}
 as a tree.  as a tree.
 We can   @@@  Tree may be expressed by putting the expression between
   {\tt SM\_beginBlock} and {\tt SM\_endBlock}, which are
   stack machine commands for delayed evaluation.
   (cf. {\tt \{ }, {\tt \} } in PostScript).
   However it makes the implementation of stack machines complicated.
   It is desirable that CMObject is independent of OX stack machine.
   Therefore we introduce an OpenMath like tree representation for CMO
   Tree object.
   This method allows us to implement tree structure easily
   on individual OpenXM systems.
   Note that CMO Tree corresponds to Symbol and Application in OpenMath.
 */  */
   
   
Line 174 
Line 221 
 /*&jp  /*&jp
 Lambda は関数を定義するための関数である.  Lambda は関数を定義するための関数である.
 Lisp の Lambda 表現と同じ.  Lisp の Lambda 表現と同じ.
   */
   /*&eg
   Lambda is used to define functions.
   The notion ``lambda'' is borrowed from the language Lisp.
   */
   
 \noindent  \noindent
 例: $sin(x+e)$ の表現.  //&jp 例: $sin(x+e)$ の表現.
   //&eg Example: the expression of $sin(x+e)$.
 \begin{verbatim}  \begin{verbatim}
 (CMO_TREE, (CMO_STRING, "sin"), (CMO_STRING, "basic"),  (CMO_TREE, (CMO_STRING, "sin"),
       (CMO_LIST,[size=]1,(CMO_LIST,[size=]2,(CMO_STRING, "cdname"),
                                             (CMO_STRING,"basic")))
     (CMO_LIST,[size=]1,      (CMO_LIST,[size=]1,
         (CMO_TREE, (CMO_STRING, "plus"), (CMO_STRING, "basic"),          (CMO_TREE, (CMO_STRING, "plus"), (CMO_STRING, "basic"),
             (CMO_LIST,[size=]2, (CMO_INDETERMINATE,"x"),              (CMO_LIST,[size=]2, (CMO_INDETERMINATE,"x"),
                                 (CMO_TREE,(CMO_STRING, "e"),  自然対数の底  //&jp                  (CMO_TREE,(CMO_STRING, "e"),  自然対数の底
                                           (CMO_STRING, "basic"))  //&eg                  (CMO_TREE,(CMO_STRING, "e"),  the base of natural logarithms
       (CMO_LIST,[size=]1,(CMO_LIST,[size=]2,(CMO_STRING, "cdname"),
                                             (CMO_STRING,"basic")))
         ))          ))
     )      )
 )  )
 \end{verbatim}  \end{verbatim}
   //&jp  Leave の成分には, 多項式を含む任意のオブジェクトがきてよい.
   //&eg  Elements of the leave may be any objects including polynomials.
   
 \noindent  \noindent
 Example:  Example:
 \begin{verbatim}  \begin{verbatim}
 sm1> [(plus) (Basic) [(123).. (345)..]] [(class) (tree)] dc ::  sm1> [(plus) [[(cdname) (basic)]] [(123).. (345)..]] [(class) (tree)] dc ::
 Class.tree [    $plus$ , $Basic$ , [    123 , 345 ]  ]  Class.tree [$plus$ , [[$cdname$ , $basic$ ]], [ 123 , 345 ]  ]
 \end{verbatim}  \end{verbatim}
   
   \noindent
   Example:
   \begin{verbatim}
   asir
   [753] taka_cmo100_xml_form(quote(sin(x+1)));
   <cmo_tree>  <cmo_string>"sin"</cmo_string>
    <cmo_list><cmo_int32 for="length">1</cmo_int32>
      <cmo_list><cmo_int32 for="length">2</cmo_int32>
        <cmo_string>"cdname"</cmo_string>
        <cmo_string>"basic"</cmo_string>
      </cmo_list> </cmo_list>
   <cmo_tree>    <cmo_string>"plus"</cmo_string>
     <cmo_list><cmo_int32 for="length">1</cmo_int32>
       <cmo_list><cmo_int32 for="length">2</cmo_int32>
         <cmo_string>"cdname"</cmo_string>
         <cmo_string>"basic"</cmo_string>
       </cmo_list> </cmo_list>
    <cmo_indeterminate> <cmo_string>"x"</cmo_string>  </cmo_indeterminate>
    <cmo_zz>1</cmo_zz>
   </cmo_tree></cmo_tree>
   \end{verbatim}
   
   
 \bigbreak  \bigbreak
 次に, 分散表現多項式に関係するグループを定義しよう.  //&jp 次に, 分散表現多項式に関係するグループを定義しよう.
   /*&eg
   Let us define a group for distributed polynomials. In the following,
   DMS stands for Distributed Monomial System.
   */
   
 \medbreak  \medbreak
 \noindent  \noindent
 Group CMObject/DistributedPolynomials requires CMObject/Basic0,  Group CMObject/DistributedPolynomials requires CMObject/Primitive,
 CMObject/Basic1. \\  CMObject/Basic. \\
 Monomial, Monomial32, Coefficient, Dpolynomial, DringDefinition,  Monomial, Monomial32, Coefficient, Dpolynomial, DringDefinition,
 Generic DMS ring, RingByName, DMS of N variables $\in$  Generic DMS ring, RingByName, DMS of N variables $\in$
 CMObject/DistributedPolynomials. \\  CMObject/DistributedPolynomials. \\
   /*&jp
 \begin{eqnarray*}  \begin{eqnarray*}
 \mbox{Monomial} &:& \mbox{Monomial32}\, |\, \mbox{Zero} \\  \mbox{Monomial} &:& \mbox{Monomial32}\, |\, \mbox{Zero} \\
 \mbox{Monomial32}&:& ({\tt CMO\_MONOMIAL32}, {\sl int32}\, n,  \mbox{Monomial32}&:& ({\tt CMO\_MONOMIAL32}, {\sl int32}\, n,
Line 219  $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$
Line 304  $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$
 をあらわす.} \\  をあらわす.} \\
 \mbox{Coefficient}&:& \mbox{ZZ} | \mbox{Integer32} \\  \mbox{Coefficient}&:& \mbox{ZZ} | \mbox{Integer32} \\
 \mbox{Dpolynomial}&:& \mbox{Zero} \\  \mbox{Dpolynomial}&:& \mbox{Zero} \\
 & & |\ ({\tt CMO\_DISTRIBUTED\_POLYNOMIAL},{\sl int32} m, \\  & & |\ ({\tt CMO\_DISTRIBUTED\_POLYNOMIAL},{\sl int32}\, m, \\
 & & \ \ \mbox{DringDefinition},  & & \ \ \mbox{DringDefinition},
 [\mbox{Monomial32}|\mbox{Zero}], \\  [\mbox{Monomial32}|\mbox{Zero}], \\
 & &\ \  & &\ \
Line 231  $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$
Line 316  $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$
 & & |\ \mbox{Generic DMS ring} \\  & & |\ \mbox{Generic DMS ring} \\
 & & \mbox{ --- 分散表現多項式環の定義. } \\  & & \mbox{ --- 分散表現多項式環の定義. } \\
 \mbox{Generic DMS ring}  \mbox{Generic DMS ring}
 &:& ({\tt CMO\_DMS\_GENERIC})\  新版はこちら\\  &:& \mbox{({\tt CMO\_DMS\_GENERIC}) --- 新版はこちら}\\
 \mbox{RingByName}&:& ({\tt CMO\_RING\_BY\_NAME}, {\sl Cstring}\  {\rm s}) \\  \mbox{RingByName}&:& ({\tt CMO\_RING\_BY\_NAME}, {\sl Cstring}\  {\rm s}) \\
 & & \mbox{ --- 名前 s で, 格納された ring 定義.} \\  & & \mbox{ --- 名前 s で, 格納された ring 定義.} \\
 \mbox{DMS of N variables}  \mbox{DMS of N variables}
Line 249  $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$
Line 334  $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$
 & & \mbox{ --- wvec は order をきめる weight vector,} \\  & & \mbox{ --- wvec は order をきめる weight vector,} \\
 & & \mbox{ --- outord は出力するときの変数順序.} \\  & & \mbox{ --- outord は出力するときの変数順序.} \\
 \end{eqnarray*}  \end{eqnarray*}
   */
   /*&eg
   \begin{eqnarray*}
   \mbox{Monomial} &:& \mbox{Monomial32}\, |\, \mbox{Zero} \\
   \mbox{Monomial32}&:& ({\tt CMO\_MONOMIAL32}, {\sl int32}\, n,
                         {\sl int32}\, \mbox{e[1]}, \ldots,
                         {\sl int32}\, \mbox{e[n]}, \\
                    & & \ \mbox{Coefficient}) \\
                    & & \mbox{ --- e[i] is the exponent $e_i$ of the monomial
                         $x^e = x_1^{e_1} \cdots x_n^{e_n}$. } \\
   \mbox{Coefficient}&:& \mbox{ZZ} | \mbox{Integer32} \\
   \mbox{Dpolynomial}&:& \mbox{Zero} \\
                    & & |\ ({\tt CMO\_DISTRIBUTED\_POLYNOMIAL},{\sl int32}\, m, \\
                    & & \ \ \mbox{DringDefinition}, [\mbox{Monomial32}|\mbox{Zero}], \\
                    & &\ \
                       \{\mbox{Monomial32}\})  \\
                    & &\mbox{--- m is equal to the number of monomials.}\\
   \mbox{DringDefinition}
                    &:& \mbox{DMS of N variables} \\
                    & & |\ \mbox{RingByName} \\
                    & & |\ \mbox{Generic DMS ring} \\
                    & & \mbox{ --- definition of the ring of distributed polynomials. } \\
   \mbox{Generic DMS ring}
                    &:& ({\tt CMO\_DMS\_GENERIC}) \\
   \mbox{RingByName}&:& ({\tt CMO\_RING\_BY\_NAME}, {\sl Cstring} s) \\
                    & & \mbox{ --- The ring definition referred by the name ``s''.} \\
   \mbox{DMS of N variables}
                    &:& ({\tt CMO\_DMS\_OF\_N\_VARIABLES}, \\
                    & & \ ({\tt CMO\_LIST}, {\sl int32}\, \mbox{m},
                     {\sl Integer32}\,  \mbox{n}, {\sl Integer32}\, \mbox{p} \\
                    & & \ \ [,{\sl Cstring}\,\mbox{s}, {\sl List}\, \mbox{vlist},
                             {\sl List}\, \mbox{wvec}, {\sl List}\, \mbox{outord}]) \\
                    & & \mbox{ --- m is the number of elements.} \\
                    & & \mbox{ --- n is the number of variables, p is the characteristic} \\
                    & & \mbox{ --- s is the name of the ring, vlist is the list of variables.} \\
                    & & \mbox{ --- wvec is the weight vector.} \\
                    & & \mbox{ --- outord is the order of variables to output.} \\
   \end{eqnarray*}
   */
   
   /*&jp
 RingByName や DMS of N variables はなくても, DMS を定義できる.  RingByName や DMS of N variables はなくても, DMS を定義できる.
 したがって, これらを実装してないシステムで DMS を扱うものが  したがって, これらを実装してないシステムで DMS を扱うものが
 あってもかまわない.  あってもかまわない.
   
 以下, 以上の CMObject  にたいする,  以下, 以上の CMObject  にたいする,
 xxx = asir, kan の振舞いを記述する.  xxx = asir, kan の振舞いを記述する.
   */
   /*&eg
   Note that it is possible to define DMS without RingByName and
   DMS of N variables.
   
   In the following we describe how the above CMObjects
   are implemented on Asir and Kan.
   */
   
 \subsection{ Zero}  \subsection{ Zero}
 CMO では ゼロの表現法がなんとうりもあるが,  /*&jp
 どのようなゼロをうけとっても,  CMO では ゼロの表現法がなんとおりもあることに注意.
 システムのゼロに変換できるべきである.  %% どのようなゼロをうけとっても,
 (たとえば, asir は 0 はただ一つ.)  %% システムのゼロに変換できるべきである.
   */
   /*&eg
   Note that CMO has various representations of zero.
   */
   
   
   //&jp \subsection{ 整数 ZZ }
   //&eg \subsection{ Integer ZZ }
   
 \subsection{ 整数 ZZ }  
   
 \begin{verbatim}  \begin{verbatim}
 #define     CMO_ZZ          20  #define     CMO_ZZ          20
 \end{verbatim}  \end{verbatim}
   
   /*&jp
   この節ではOpen xxx 規約における任意の大きさの整数(bignum)の扱いについ
   て説明する.  Open XM 規約における多重精度整数を表すデータ型 CMO\_ZZ は
   GNU MPライブラリなどを参考にして設計されていて, 符号付き絶対値表現を用
   いている.  (cf. {\tt kan/sm1} の配布ディレクトリのなかの {\tt
   plugin/cmo-gmp.c}) CMO\_ZZ は次の形式をとる.
   */
   /*&eg
   We describe the bignum (multi-precision integer) representation
   {\tt CMO\_ZZ} in OpenXM.
   The format is similar
   to that in GNU MP. (cf. {\tt plugin/cmo-gmp.c} in the {\tt kan/sm1}
   distribution). CMO\_ZZ is defined as follows.
   */
   
 この節ではOpen xxx 規約における任意の大きさの整数(bignum)の扱いについて  
 説明する.  
 Open XM 規約における多重精度整数を表すデータ型 CMO\_ZZ は GNU MPライブ  
 ラリなどを参考にして設計されていて, 符号付き絶対値表現を用いている.  
 (cf. {\tt kan/sm1} の配布ディレクトリのなかの {\tt plugin/cmo-gmp.c})  
 CMO\_ZZ は次の形式をとる.\\  
 \begin{tabular}{|c|c|c|c|c|}  \begin{tabular}{|c|c|c|c|c|}
 \hline  \hline
 {\tt int32 CMO\_ZZ} & {\tt int32 $f$} & {\tt int32 $b_0$} & $\cdots$ &  {\tt int32 CMO\_ZZ} & {\tt int32 $f$} & {\tt int32 $b_0$} & $\cdots$ &
 {\tt int32 $b_{n}$} \\  {\tt int32 $b_{n}$} \\
 \hline  \hline
 \end{tabular} \\  \end{tabular}
 $f$ は32bit整数である.  
 $b_0, \ldots, b_n$ は unsigned int32 である.  
 $|f|$ は $n+1$ である.  
 この CMO の符号は $f$ の符号で定める.  
 前述したように, 32bit整数の負数は 2 の補数表現で表される.  
   
 Open xxx 規約では上の CMO は以下の整数を意味する.  /*&jp
   $f$ は32bit整数である.  $b_0, \ldots, b_n$ は unsigned int32 である.
   $|f|$ は $n+1$ である.  この CMO の符号は $f$ の符号で定める.  前述し
   たように, 32bit整数の負数は 2 の補数表現で表される.
   
   Open xxx 規約では上の CMO は以下の整数を意味する. ($R = 2^{32}$)
   */
   /*&eg
   $f$ is a 32bit integer. $b_0, \ldots, b_n$ are unsigned 32bit integers.
   $|f|$ is equal to $n+1$.
   The sign of $f$ represents that of the above integer to be expressed.
   As stated in Section
   \ref{sec:basic0}, a negative 32bit integer is represented by
   two's complement.
   
   In OpenXM the above CMO represents the following integer. ($R = 2^{32}$.)
   */
   
 \[  \[
 \mbox{sgn}(f)\times (b_0 R^{0}+ b_1 R^{1} + \cdots + b_{n-1}R^{n-1} + b_n R^n).  \mbox{sgn}(f)\times (b_0 R^{0}+ b_1 R^{1} + \cdots + b_{n-1}R^{n-1} + b_n R^n).
 \]  \]
 ここで $R = 2^{32}$ である.  
 {\tt int32} を network byte order で表現しているとすると,  /*&jp
 例えば, 整数 $14$ は CMO\_ZZ で表わすと,  \noindent  例:
   {\tt int32} を network byte order で表現
   しているとすると,例えば, 整数 $14$ は CMO\_ZZ で表わすと,
   */
   /*&eg
   \noindent Example:
   If we express {\tt int32} by the network byte order,
   a CMO\_ZZ $14$ is expressed by
   */
 \[  \[
 \mbox{(CMO\_ZZ, 1, 0, 0, 0, e)},  \mbox{(CMO\_ZZ, 1, 0, 0, 0, e)},
 \]  \]
 と表わす.  //&jp と表わす. これはバイト列では
 これはバイト列では  //&eg The corresponding byte sequence is
 \[  \[
 \mbox{\tt 00 00 00 14 00 00 00 01 00 00 00 0e}  \mbox{\tt 00 00 00 14 00 00 00 01 00 00 00 0e}
 \]  \]
 となる.  //&jp となる.
   
   
 なお ZZ の 0  ( (ZZ) 0 と書く ) は,  //&jp なお ZZ の 0 ( (ZZ) 0 と書く ) は, {\tt (CMO\_ZZ, 00,00,00,00)} と表現する.
 {\tt (CMO\_ZZ, 00,00,00,00)}  //&eg Note that CMO\_ZZ 0 is expressed by {\tt (CMO\_ZZ, 00,00,00,00)}.
 と表現する.  
   
   
 \subsection{ 分散表現多項式 Dpolynomial }  //&jp \subsection{ 分散表現多項式 Dpolynomial }
   //&eg \subsection{ Distributed polynomial Dpolynomial }
   
   /*&jp
 環とそれに属する多項式は次のような考えかたであつかう.  環とそれに属する多項式は次のような考えかたであつかう.
   
 Generic DMS ring に属する元は,  Generic DMS ring に属する元は,
Line 343  Ring by Name を用いた場合, 現在の名前空間で変数 yyy に
Line 509  Ring by Name を用いた場合, 現在の名前空間で変数 yyy に
 {\tt kan/sm1} の場合, 環の定義は ring object として格納されており,  {\tt kan/sm1} の場合, 環の定義は ring object として格納されており,
 この ring object を 変数 yyy で参照することにより CMO としてうけとった  この ring object を 変数 yyy で参照することにより CMO としてうけとった
 多項式をこの ring の元として格納できる.  多項式をこの ring の元として格納できる.
   */
   
   /*&eg
   We treat polynomial rings and their elements as follows.
   
   Generic DMS ring is an $n$-variate polynomial ring $K[x_1, \ldots, x_n]$,
   where $K$ is a coefficient set. $K$ is unknown in advance
   and it is determined when coefficients of an element are received.
   When a server has received an element in Generic DMS ring,
   the server has to translate it into the corresponding local object
   on the server. Each server has its own translation scheme.
   In Asir such an element are translated into a distributed polynomial.
   In {\tt kan/sm1} things are complicated.
   {\tt kan/sm1} does not have any class corresponding to Generic DMS ring.
   {\tt kan/sm1} translates a DMS of N variables into an element of
   the CurrentRing.
   If the CurrentRing is $n'$-variate and $n' < n$, then
   an $n$-variate polynomial ring is newly created.
   
   
   If RingByName ({\tt CMO\_RING\_BY\_NAME}, yyy)
   is specified as the second field of DMS,
   it requests a sever to use a ring object whose name is yyy
   as the destination ring for the translation.
   */
   
 \medbreak \noindent  \medbreak \noindent
 {\bf Example}:  //&jp {\bf Example}: (すべての数の表記は 16 進表記)
 (すべての数の表記は 16 進表記)  //&eg {\bf Example}: (all numbers are represented in hexadecimal notation)
 {\footnotesize \begin{verbatim}  {\footnotesize \begin{verbatim}
 Z/11Z [6 variables]  Z/11Z [6 variables]
 (kxx/cmotest.sm1) run  (kxx/cmotest.sm1) run
Line 369  ff omc ::
Line 556  ff omc ::
  (CMO_DISTRIBUTED_POLYNOMIAL[1f],[size=]1,(CMO_DMS_GENERIC[18],),   (CMO_DISTRIBUTED_POLYNOMIAL[1f],[size=]1,(CMO_DMS_GENERIC[18],),
   (CMO_MONOMIAL32[13],3*x^2*y),),    (CMO_MONOMIAL32[13],3*x^2*y),),
 \end{verbatim} }  \end{verbatim} }
 length は, monomial の数$+2$ である.  /*&jp
 $ 3 x^2 y$ は 6 変数の多項式環の元としてみなされている.  $ 3 x^2 y$ は 6 変数の多項式環の 元としてみなされている.
 %%Prog: (3x^2 y). cmosave   ===> debug/cmodata1.cmo  */
 %%\\ 反省: 分散多項式の定義で,  /*&eg
 %%{\tt CMO\_LIST} でなく, {\tt CMO\_DMS} がはじめにくるべきだったのでは?  $3 x^2 y$ is regarded as an element of a six-variate polynomial ring.
 %%あたらしい 分散多項式の定義は次のようにすべき:  */
 %% 修正済み. 1999, 9/13  
   
   
   //&jp \subsection{再帰表現多項式の定義}
   //&eg \subsection{Recursive polynomials}
   
 \subsection{再帰表現多項式の定義}  
   
 \begin{verbatim}  \begin{verbatim}
 #define CMO_RECURSIVE_POLYNOMIAL        27  #define CMO_RECURSIVE_POLYNOMIAL        27
 #define CMO_POLYNOMIAL_IN_ONE_VARIABLE  33  #define CMO_POLYNOMIAL_IN_ONE_VARIABLE  33
 \end{verbatim}  \end{verbatim}
   
 Group CMObject/RecursivePolynomial requires CMObject/Basic0, CMObject/Basic1.\\  Group CMObject/RecursivePolynomial requires CMObject/Primitive, CMObject/Basic.\\
 Polynomial in 1 variable, Coefficient, Name of the main variable,  Polynomial in 1 variable, Coefficient, Name of the main variable,
 Recursive Polynomial, Ring definition for recursive polynomials  Recursive Polynomial, Ring definition for recursive polynomials
 $\in$ CMObject/RecursivePolynomial \\  $\in$ CMObject/RecursivePolynomial \\
   
   /*&jp
 \begin{eqnarray*}  \begin{eqnarray*}
 \mbox{Polynomial in 1 variable} &:&  \mbox{Polynomial in 1 variable} &:&
 \mbox{({\tt CMO\_POLYNOMIAL\_IN\_ONE\_VARIABLE},\, {\sl int32}\, m, } \\  \mbox{({\tt CMO\_POLYNOMIAL\_IN\_ONE\_VARIABLE},\, {\sl int32}\, m, } \\
 & & \quad \mbox{ Name of the main variable }, \\  & & \quad \mbox{ Name of the main variable }, \\
 & & \quad \mbox{ \{ {\sl int32} e, Coefficient \}} \\  & & \quad \mbox{ \{ {\sl int32} e, Coefficient \}} ) \\
 & & \mbox{ --- m はモノミアルの個数. } \\  & & \mbox{ --- m はモノミアルの個数. } \\
 & & \mbox{ --- e, Coefficieint はモノミアルを表現している. } \\  & & \mbox{ --- e, Coefficieint はモノミアルを表現している. } \\
 & & \mbox{ --- 順序の高い順にならべる. 普通は巾の高い順.} \\  & & \mbox{ --- 順序の高い順にならべる. 普通は巾の高い順.} \\
Line 409  $\in$ CMObject/RecursivePolynomial \\
Line 596  $\in$ CMObject/RecursivePolynomial \\
 & & \mbox{ --- v は 変数番号 (0 からはじまる) を表す. } \\  & & \mbox{ --- v は 変数番号 (0 からはじまる) を表す. } \\
 \mbox{Recursive Polynomial} &:&  \mbox{Recursive Polynomial} &:&
 \mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\  \mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\
 & & \quad \mbox{ Ring definition for  & & \quad \mbox{ RringDefinition, } \\
 recursive polynomials, } \\  
 & & \quad  & & \quad
 \mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient}   \\  \mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} )  \\
 \mbox{Ring definition for recursive polynomials }  \mbox{RringDefinition}
 & : &  \mbox{ {\sl List} v } \\  & : &  \mbox{ {\sl List} v } \\
 & & \quad \mbox{ --- v は, 変数名(indeterminate) のリスト. } \\  & & \quad \mbox{ --- v は, 変数名(indeterminate) または Tree のリスト. } \\
 & & \quad \mbox{ --- 順序の高い順. } \\  & & \quad \mbox{ --- 順序の高い順. } \\
 \end{eqnarray*}  \end{eqnarray*}
   */
   /*&eg
   \begin{eqnarray*}
   \mbox{Polynomial in 1 variable} &:&
   \mbox{({\tt CMO\_POLYNOMIAL\_IN\_ONE\_VARIABLE},\, {\sl int32}\, m, } \\
   & & \quad \mbox{ Name of the main variable }, \\
   & & \quad \mbox{ \{ {\sl int32} e, Coefficient \}} ) \\
   & & \mbox{ --- m is the number of monomials. } \\
   & & \mbox{ --- A pair of e and Coefficient represents a monomial. } \\
   & & \mbox{ --- The pairs of e and Coefficient are sorted in the } \\
   & & \mbox{ \quad decreasing order, usually with respect to e.} \\
   & & \mbox{ ---  e denotes an exponent of a monomial with respect to } \\
   & & \mbox{ \quad the main variable. } \\
   \mbox{Coefficient} &:& \mbox{ ZZ} \,|\, \mbox{ QQ } \,|\,
   \mbox{ integer32  } \,|\,
   \mbox{ Polynomial in 1 variable } \\
   & & \quad \,|\, \mbox{Tree} \,|\, \mbox{Zero} \,|\,\mbox{Dpolynomial}\\
   \mbox{Name of the main variable } &:&
   \mbox{ {\sl int32} v }   \\
   & & \mbox{ --- v denotes a variable number. } \\
   \mbox{Recursive Polynomial} &:&
   \mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\
   & & \quad \mbox{ RringDefinition, } \\
   & & \quad
   \mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} )  \\
   \mbox{RringDefinition}
   & : &  \mbox{ {\sl List} v } \\
   & & \quad \mbox{ --- v is a list of names of indeterminates or trees. } \\
   & & \quad \mbox{ --- It is sorted in the decreasing order. } \\
   \end{eqnarray*}
   */
 \bigbreak  \bigbreak
 \noindent  \noindent
 実例:  Example:
 \begin{verbatim}  \begin{verbatim}
 (CMO_RECURSIEVE_POLYNOMIAL, ("x","y"),  (CMO_RECURSIEVE_POLYNOMIAL, ("x","y"),
 (CMO_POLYNOMIAL_IN_ONE_VARIABLE, 2,      0,  <--- "x"  (CMO_POLYNOMIAL_IN_ONE_VARIABLE, 2,      0,  <--- "x"
Line 432  recursive polynomials, } \\
Line 648  recursive polynomials, } \\
        10, 1,         10, 1,
        5, 31)))         5, 31)))
 \end{verbatim}  \end{verbatim}
 これは,  //&jp これは,
 $$   x^3 (1234 y^5 + 17 ) +  x^1 (y^10 + 31 y^5)  $$  //&eg This represents
   $$   x^3 (1234 y^5 + 17 ) +  x^1 (y^{10} + 31 y^5)  $$
   /*&jp
 をあらわす.  をあらわす.
 非可換多項式もこの形式であらわしたいので, 積の順序を上のように  %%非可換多項式もこの形式であらわしたいので, 積の順序を上のように
 すること. つまり, 主変数かける係数の順番.  %%すること. つまり, 主変数かける係数の順番.
   */
   /*&eg
   %%We intend to represent non-commutative polynomials with the
   %%same form. In such a case, the order of products are defined
   %%as above, that is a power of the main variable $\times$ a coeffcient.
   
   */
   
 \noindent  \noindent
 \begin{verbatim}  \begin{verbatim}
 sm1  sm1
Line 446  sm1>ff ::
Line 671  sm1>ff ::
 Class.recursivePolynomial h * ((-1)) + (x^2  * (1))  Class.recursivePolynomial h * ((-1)) + (x^2  * (1))
 \end{verbatim}  \end{verbatim}
   
   //&jp \subsection{CPU依存の double }
   //&eg \subsection{CPU dependent double}
   
   
 int32 と Integer32 の違い.  
 次にくるデータがかならず int32 とわかっておれば,  
 int32 を用いる.  
 次のデータ型がわからないとき Integer32 を用いる.  
   
   
 \subsection{CPU依存の double }  
   
 \begin{verbatim}  \begin{verbatim}
 #define CMO_64BIT_MACHINE_DOUBLE   40  #define CMO_64BIT_MACHINE_DOUBLE   40
 #define CMO_ARRAY_OF_64BIT_MACHINE_DOUBLE  41  #define CMO_ARRAY_OF_64BIT_MACHINE_DOUBLE  41
Line 464  int32 を用いる.
Line 682  int32 を用いる.
 \end{verbatim}  \end{verbatim}
   
 \noindent  \noindent
 Group CMObject/MachineDouble requires CMObject/Basic0.\\  Group CMObject/MachineDouble requires CMObject/Primitive.\\
 64bit machine double, Array of 64bit machine double  64bit machine double, Array of 64bit machine double
 128bit machine double, Array of 128bit machine double  128bit machine double, Array of 128bit machine double
 $\in$ CMObject/MachineDouble \\  $\in$ CMObject/MachineDouble \\
   
   /*&jp
 \begin{eqnarray*}  \begin{eqnarray*}
 \mbox{64bit machine double} &:&  \mbox{64bit machine double} &:&
 \mbox{({\tt CMO\_64BIT\_MACHINE\_DOUBLE}, } \\  \mbox{({\tt CMO\_64BIT\_MACHINE\_DOUBLE}, } \\
 & & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte}} s8)\\  & & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte} s8})\\
 & & \mbox{ --- s1, $\ldots$, s8 は {\tt double} (64bit). } \\  & & \mbox{ --- s1, $\ldots$, s8 は {\tt double} (64bit). } \\
 & & \mbox{ --- この表現はCPU依存である.}\\  & & \mbox{ --- この表現はCPU依存である.}\\
 &&  \mbox{\quad\quad mathcap に CPU 情報を付加しておく.} \\  &&  \mbox{\quad\quad byte order negotiation を用いる.} \\
 \mbox{Array of 64bit machine double} &:&  \mbox{Array of 64bit machine double} &:&
 \mbox{({\tt CMO\_ARRAY\_OF\_64BIT\_MACHINE\_DOUBLE}, {\sl int32} m, } \\  \mbox{({\tt CMO\_ARRAY\_OF\_64BIT\_MACHINE\_DOUBLE}, {\sl int32} m, } \\
 & & \quad \mbox{ {\sl byte} s1[1] , \ldots , {\sl byte}}\, s8[1], \ldots , {\sl byte}\, s8[m])\\  & & \quad \mbox{ {\sl byte} s1[1] , \ldots , {\sl byte}}\, s8[1], \ldots , {\sl byte}\, s8[m])\\
 & & \mbox{ --- s*[1], $\ldots$ s*[m] は m 個の double (64bit) である. } \\  & & \mbox{ --- s*[1], $\ldots$ s*[m] は m 個の double (64bit) である. } \\
 & & \mbox{ --- この表現はCPU依存である.}\\  & & \mbox{ --- この表現はCPU依存である.}\\
 & & \mbox{ \quad\quad mathcap に CPU 情報を付加しておく.} \\  & & \mbox{ \quad\quad byte order negotiation を用いる.} \\
 \mbox{128bit machine double} &:&  \mbox{128bit machine double} &:&
 \mbox{({\tt CMO\_128BIT\_MACHINE\_DOUBLE}, } \\  \mbox{({\tt CMO\_128BIT\_MACHINE\_DOUBLE}, } \\
 & & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte}} s16)\\  & & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte} s16})\\
 & & \mbox{ --- s1, $\ldots$, s16 は {\tt long double} (128bit). } \\  & & \mbox{ --- s1, $\ldots$, s16 は {\tt long double} (128bit). } \\
 & & \mbox{ --- この表現はCPU依存である.}\\  & & \mbox{ --- この表現はCPU依存である.}\\
 &&  \mbox{\quad\quad mathcap に CPU 情報を付加しておく.} \\  &&  \mbox{\quad\quad byte order negotiation を用いる.} \\
 \mbox{Array of 128bit machine double} &:&  \mbox{Array of 128bit machine double} &:&
 \mbox{({\tt CMO\_ARRAY\_OF\_128BIT\_MACHINE\_DOUBLE}, {\sl int32} m, } \\  \mbox{({\tt CMO\_ARRAY\_OF\_128BIT\_MACHINE\_DOUBLE}, {\sl int32} m, } \\
 & & \quad \mbox{ {\sl byte} s1[1] , \ldots , {\sl byte}} s16[1], \ldots , {\sl byte} s16[m])\\  & & \quad \mbox{ {\sl byte} s1[1] , \ldots , {\sl byte} s16[1], \ldots , {\sl byte} s16[m]})\\
 & & \mbox{ --- s*[1], $\ldots$ s*[m] は m 個の long double (128bit) である. } \\  & & \mbox{ --- s*[1], $\ldots$ s*[m] は m 個の long double (128bit) である. } \\
 & & \mbox{ --- この表現はCPU依存である.}\\  & & \mbox{ --- この表現はCPU依存である.}\\
 & & \mbox{ \quad\quad mathcap に CPU 情報を付加しておく.}  & & \mbox{ \quad\quad byte order negotiation を用いる.}
 \end{eqnarray*}  \end{eqnarray*}
   */
   /*&eg
   \begin{eqnarray*}
   \mbox{64bit machine double} &:&
   \mbox{({\tt CMO\_64BIT\_MACHINE\_DOUBLE}, } \\
   & & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte} s8})\\
   & & \mbox{ --- s1, $\ldots$, s8 は {\tt double} (64bit). } \\
   & & \mbox{ --- Encoding depends on CPU.}\\
   &&  \mbox{\quad\quad Need the byte order negotiation.} \\
   \mbox{Array of 64bit machine double} &:&
   \mbox{({\tt CMO\_ARRAY\_OF\_64BIT\_MACHINE\_DOUBLE}, {\sl int32} m, } \\
   & & \quad \mbox{ {\sl byte} s1[1] , \ldots , {\sl byte}}\, s8[1], \ldots , {\sl byte}\, s8[m])\\
   & & \mbox{ --- s*[1], $\ldots$ s*[m] are 64bit double's. } \\
   & & \mbox{ --- Encoding depends on CPU.}\\
   & & \mbox{\quad\quad Need the byte order negotiation.} \\
   \mbox{128bit machine double} &:&
   \mbox{({\tt CMO\_128BIT\_MACHINE\_DOUBLE}, } \\
   & & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte} s16})\\
   & & \mbox{ --- s1, $\ldots$, s16 は {\tt long double} (128bit). } \\
   & & \mbox{ --- Encoding depends on CPU.}\\
   & & \mbox{\quad\quad Need the byte order negotiation.} \\
   \mbox{Array of 128bit machine double} &:&
   \mbox{({\tt CMO\_ARRAY\_OF\_128BIT\_MACHINE\_DOUBLE}, {\sl int32} m, } \\
   & & \quad \mbox{ {\sl byte} s1[1] , \ldots , {\sl byte} s16[1], \ldots , {\sl byte} s16[m]})\\
   & & \mbox{ --- s*[1], $\ldots$ s*[m] are 128bit long double's. } \\
   & & \mbox{ --- Encoding depends on CPU.}\\
   & & \mbox{\quad\quad Need the byte order negotiation.} \\
   \end{eqnarray*}
   */
   
 \bigbreak  \bigbreak
 次に IEEE 準拠の float および Big float を定義しよう.  
 \begin{verbatim}  \begin{verbatim}
 #define CMO_BIGFLOAT   50  #define CMO_BIGFLOAT   50
 #define CMO_IEEE_DOUBLE_FLOAT 51  #define CMO_IEEE_DOUBLE_FLOAT 51
 \end{verbatim}  \end{verbatim}
   
 IEEE 準拠の float については,  /*&jp
 IEEE 754  double precision floating-point format  IEEE 準拠の float については, IEEE 754 double precision floating-point
 (64 bit) の定義を見よ.  format (64 bit) の定義を見よ.
   
   256.100006 の Intel Pentium の double64 での内部表現は
   {\tt cd 0c 80 43 } \\
   256.100006 の PowerPC (Mac) の double64 での内部表現は
   {\tt 43 80 0c cd }.
   この例でみるように byte の順序が逆である.
   エンジンスタートの時の byte order negotiation で byte の順序を指定する.
   
   
   */
   /*&eg
   See IEEE 754 double precision floating-point (64 bit) for the details of
   float compliant to the IEEE standard.
   
   The internal expression of 256.100006 in the Intel Pentium  is
   {\tt cd 0c 80 43 } \\
   The internal expression of 256.100006 in the PowerPC (Mac) is
   {\tt 43 80 0c cd }.
   As you have seen in this example,
   the orders of the bytes are opposite each other.
   The byte order is specified by the byte order negotiation protocol
   when the engine starts.
   
   */
   
 \noindent  \noindent
 Group CMObject/Bigfloat requires CMObject/Basic0, CMObject/Basic1.\\  Group CMObject/Bigfloat requires CMObject/Primitive, CMObject/Basic.\\
 Bigfloat  Bigfloat
 $\in$ CMObject/Bigfloat \\  $\in$ CMObject/Bigfloat \\
   
Line 516  $\in$ CMObject/Bigfloat \\
Line 788  $\in$ CMObject/Bigfloat \\
 \mbox{Bigfloat} &:&  \mbox{Bigfloat} &:&
 \mbox{({\tt CMO\_BIGFLOAT}, } \\  \mbox{({\tt CMO\_BIGFLOAT}, } \\
 & & \quad \mbox{ {\sl ZZ} a , {\sl ZZ} e})\\  & & \quad \mbox{ {\sl ZZ} a , {\sl ZZ} e})\\
 & & \mbox{ --- $a \times 2^e$ をあらわす. } \\  & & \mbox{ --- $a \times 2^e$. } \\
 \end{eqnarray*}  \end{eqnarray*}
   
   
 */  

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.14

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>