=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v retrieving revision 1.3 retrieving revision 1.14 diff -u -p -r1.3 -r1.14 --- OpenXM/doc/OpenXM-specs/cmo-basic1.tex 2000/01/23 05:28:33 1.3 +++ OpenXM/doc/OpenXM-specs/cmo-basic1.tex 2015/08/18 02:54:05 1.14 @@ -1,7 +1,7 @@ -%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.1.1.1 2000/01/20 08:52:46 noro Exp $ +%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.13 2005/03/04 03:49:47 takayama Exp $ //&jp \section{ 数, 多項式 の CMO 表現 } //&eg \section{ CMOexpressions for numbers and polynomials } - +\label{sec:basic1} /*&C @../SSkan/plugin/cmotag.h \begin{verbatim} @@ -14,6 +14,7 @@ #define CMO_RING_BY_NAME 26 #define CMO_DISTRIBUTED_POLYNOMIAL 31 #define CMO_RATIONAL 34 +#define CMO_COMPLEX 35 #define CMO_INDETERMINATE 60 @@ -24,54 +25,90 @@ */ /*&jp -以下, グループ CMObject/Basic1, CMObject/Tree +以下, グループ CMObject/Basic, CMObject/Tree および CMObject/DistributedPolynomial に属する CMObject の形式を説明する. -\noroa{ tagged list を導入すべきか? cf. SSkan/plugin/cmo.txt } +\noindent +{\tt OpenXM/src/ox\_toolkit} にある {\tt bconv} をもちいると +CMO expression を binary format に変換できるので, +これを参考にするといい. */ /*&eg In the sequel, we will explain on the groups -CMObject/Basic1, CMObject/Tree +CMObject/Basic, CMObject/Tree 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 \bigbreak \noindent -Group CMObject/Basic1 requires CMObject/Basic0. \\ -ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/Basic1. \\ +Group CMObject/Basic requires CMObject/Primitive. \\ +ZZ, QQ, Zero, Rational, Indeterminate $\in$ CMObject/Basic. \\ \begin{eqnarray*} \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\ & & \mbox{ --- ユニバーサルな ゼロを表す. } \\ -\mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots -{\sl byte}\, \mbox{a[m]} ) \\ +\mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots , +{\sl byte}\, \mbox{a[$|$f$|$]} ) \\ &:& \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{Rational} &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm 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{ --- 変数名 $v$ . } \\ \end{eqnarray*} */ + + /*&eg \bigbreak \noindent -Group CMObject/Basic1 requires CMObject/Basic0. \\ -ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/Basic1. \\ +Group CMObject/Basic requires CMObject/Primitive. \\ +ZZ, QQ, Zero, Rational, Indeterminate $\in$ CMObject/Basic. \\ \begin{eqnarray*} \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\ & & \mbox{ --- Universal zero } \\ -\mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots -{\sl byte}\, \mbox{a[m]} ) \\ +\mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots , +{\sl byte}\, \mbox{a[$|$m$|$]} ) \\ &:& \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} &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm 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{ --- Variable name $v$ . } \\ \end{eqnarray*} @@ -79,7 +116,10 @@ ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B /*&C */ +/*&C +*/ + /*&jp Indeterminate は変数名をあらわす. v はバイト列であればなにを用いてもよいが, @@ -92,45 +132,46 @@ escape sequence を用いて実現するのは, 無理があるようで テーブルを作成する必要があるであろう.) */ /*&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 restrictions on the names of variables. Indeterminates of CMO and internal variable names must be translated -in one to one correspondence. +in one-to-one correspondence. */ + /*&jp +\subsection{Indeterminate および Tree} \noindent -Group CMObject/Tree requires CMObject/Basic1. \\ -Tree, Lambda $\in$ CMObject/Basic1. \\ +Group CMObject/Tree requires CMObject/Basic. \\ +Tree, Lambda $\in$ CMObject/Tree. \\ \begin{eqnarray*} \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{ --- cdname は空文字列でなければ name の意味が説明されている }\\ -& & \mbox{ --- OpenMath CD (content dictionary) の名前. } \\ +& & \mbox{ --- attributes は空リストでなければ name の属性を保持している. }\\ +& & \mbox{ --- 属性リストは, key と 値のペアである. }\\ \mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, {\sl Tree} {\rm body}) \\ & & \mbox{ --- body を args を引数とする関数とする. } \\ -& & \mbox{ --- optional な引数が必要なときは, leaves の後へつづける.} \\ \end{eqnarray*} */ /*&eg +\subsection{Indeterminate and Tree} \noindent -Group CMObject/Tree requires CMObject/Basic1. \\ -Tree, Lambda $\in$ CMObject/Basic1. \\ +Group CMObject/Tree requires CMObject/Basic. \\ +Tree, Lambda $\in$ CMObject/Tree. \\ \begin{eqnarray*} \mbox{Tree} &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name}, - {\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\ -& & \mbox{ --- A function or a constant of name. Functions are not evaluated. } \\ -& & \mbox{ --- cdname may be a null. If it is not null, it is the name of}\\ -& & \mbox{ --- the OpenMath CD (content dictionary). } \\ + {\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\ +& & \mbox{ --- ``name'' is the name of the node of the tree. } \\ +& & \mbox{ --- Attributes may be a null list. If it is not null, it is a list of}\\ +& & \mbox{ --- key and value pairs. } \\ \mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, {\sl Tree} {\rm body}) \\ & & \mbox{ --- a function with the arguments body. } \\ -& & \mbox{ --- optional arguments come after leaves.} \\ \end{eqnarray*} */ @@ -160,14 +201,14 @@ For example, $\sin(x+e)$ is expressed as {\tt (sin, (plus, x, e))} as a tree. -Tree may be expressed by putting itself between +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. +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. @@ -183,42 +224,71 @@ Lisp の Lambda 表現と同じ. */ /*&eg Lambda is used to define functions. -It is the same as the Lambda expression in Lisp. +The notion ``lambda'' is borrowed from the language Lisp. */ \noindent //&jp 例: $sin(x+e)$ の表現. //&eg Example: the expression of $sin(x+e)$. \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_TREE, (CMO_STRING, "plus"), (CMO_STRING, "basic"), (CMO_LIST,[size=]2, (CMO_INDETERMINATE,"x"), -//&jp (CMO_TREE,(CMO_STRING, "e"), 自然対数の底 -//&eg (CMO_TREE,(CMO_STRING, "e"), Napier's number - (CMO_STRING, "basic")) +//&jp (CMO_TREE,(CMO_STRING, "e"), 自然対数の底 +//&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} +//&jp Leave の成分には, 多項式を含む任意のオブジェクトがきてよい. +//&eg Elements of the leave may be any objects including polynomials. \noindent Example: \begin{verbatim} -sm1> [(plus) (Basic) [(123).. (345)..]] [(class) (tree)] dc :: -Class.tree [ $plus$ , $Basic$ , [ 123 , 345 ] ] +sm1> [(plus) [[(cdname) (basic)]] [(123).. (345)..]] [(class) (tree)] dc :: +Class.tree [$plus$ , [[$cdname$ , $basic$ ]], [ 123 , 345 ] ] \end{verbatim} +\noindent +Example: +\begin{verbatim} +asir +[753] taka_cmo100_xml_form(quote(sin(x+1))); + "sin" + 1 + 2 + "cdname" + "basic" + + "plus" + 1 + 2 + "cdname" + "basic" + + "x" + 1 + +\end{verbatim} \bigbreak //&jp 次に, 分散表現多項式に関係するグループを定義しよう. -//&eg Let us define a group for distributed polynomials. +/*&eg +Let us define a group for distributed polynomials. In the following, +DMS stands for Distributed Monomial System. +*/ \medbreak \noindent -Group CMObject/DistributedPolynomials requires CMObject/Basic0, -CMObject/Basic1. \\ +Group CMObject/DistributedPolynomials requires CMObject/Primitive, +CMObject/Basic. \\ Monomial, Monomial32, Coefficient, Dpolynomial, DringDefinition, Generic DMS ring, RingByName, DMS of N variables $\in$ CMObject/DistributedPolynomials. \\ @@ -234,7 +304,7 @@ $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ をあらわす.} \\ \mbox{Coefficient}&:& \mbox{ZZ} | \mbox{Integer32} \\ \mbox{Dpolynomial}&:& \mbox{Zero} \\ -& & |\ ({\tt CMO\_DISTRIBUTED\_POLYNOMIAL},{\sl int32} m, \\ +& & |\ ({\tt CMO\_DISTRIBUTED\_POLYNOMIAL},{\sl int32}\, m, \\ & & \ \ \mbox{DringDefinition}, [\mbox{Monomial32}|\mbox{Zero}], \\ & &\ \ @@ -276,7 +346,7 @@ $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ $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, \\ + & & |\ ({\tt CMO\_DISTRIBUTED\_POLYNOMIAL},{\sl int32}\, m, \\ & & \ \ \mbox{DringDefinition}, [\mbox{Monomial32}|\mbox{Zero}], \\ & &\ \ \{\mbox{Monomial32}\}) \\ @@ -289,7 +359,7 @@ $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ \mbox{Generic DMS ring} &:& ({\tt CMO\_DMS\_GENERIC}) \\ \mbox{RingByName}&:& ({\tt CMO\_RING\_BY\_NAME}, {\sl Cstring} s) \\ - & & \mbox{ --- The ring definition refered by the name ``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}, @@ -322,14 +392,12 @@ are implemented on Asir and Kan. \subsection{ Zero} /*&jp -CMO では ゼロの表現法がなんとおりもあるが, -どのようなゼロをうけとっても, -システムのゼロに変換できるべきである. +CMO では ゼロの表現法がなんとおりもあることに注意. +%% どのようなゼロをうけとっても, +%% システムのゼロに変換できるべきである. */ /*&eg -Though CMO has various representations of zero, -each representation should be translated into zero -in the system. +Note that CMO has various representations of zero. */ @@ -348,8 +416,9 @@ GNU MPライブラリなどを参考にして設計されていて, 符号付 plugin/cmo-gmp.c}) CMO\_ZZ は次の形式をとる. */ /*&eg -We describe the bignum (multi-precision integer) representation in OpenXM. -In OpenXM {\tt CMO\_ZZ} is used to represent bignum. Its design is similar +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. */ @@ -371,7 +440,8 @@ Open xxx 規約では上の CMO は以下の整数を意味する. ($R /*&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 CMO. As stated in Section +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. @@ -383,10 +453,12 @@ In OpenXM the above CMO represents the following integ \] /*&jp +\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 */ @@ -394,7 +466,7 @@ a CMO\_ZZ $14$ is expressed by \mbox{(CMO\_ZZ, 1, 0, 0, 0, e)}, \] //&jp と表わす. これはバイト列では -//&egThe corresponding byte sequence is +//&eg The corresponding byte sequence is \[ \mbox{\tt 00 00 00 14 00 00 00 01 00 00 00 0e} \] @@ -442,29 +514,25 @@ Ring by Name を用いた場合, 現在の名前空間で変数 yyy に /*&eg We treat polynomial rings and their elements as follows. -An element of a generic DMS ring is an element of -an $n$-variate polynomial ring $K[x_1, \ldots, x_n]$, -where $K$ is some coefficient set. $K$ is unknown in advance -and it is determined when coefficients are received. -When a server has received an element in a generic DMS ring, +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 a generic DMS ring. +{\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 -a polynomial ring is newly created. Optional informations such as -the term order are all ignored. +an $n$-variate polynomial ring is newly created. -If RingbyName ({\tt CMO\_RING\_BY\_NAME}, yyy) + +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. -This is done in {\tt kan/sm1}. */ \medbreak \noindent @@ -504,7 +572,7 @@ $3 x^2 y$ is regarded as an element of a six-variate p #define CMO_POLYNOMIAL_IN_ONE_VARIABLE 33 \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, Recursive Polynomial, Ring definition for recursive polynomials $\in$ CMObject/RecursivePolynomial \\ @@ -514,7 +582,7 @@ $\in$ CMObject/RecursivePolynomial \\ \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 \}} \\ +& & \quad \mbox{ \{ {\sl int32} e, Coefficient \}} ) \\ & & \mbox{ --- m はモノミアルの個数. } \\ & & \mbox{ --- e, Coefficieint はモノミアルを表現している. } \\ & & \mbox{ --- 順序の高い順にならべる. 普通は巾の高い順.} \\ @@ -530,10 +598,10 @@ $\in$ CMObject/RecursivePolynomial \\ \mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\ & & \quad \mbox{ RringDefinition, } \\ & & \quad -\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ +\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} ) \\ \mbox{RringDefinition} & : & \mbox{ {\sl List} v } \\ -& & \quad \mbox{ --- v は, 変数名(indeterminate) のリスト. } \\ +& & \quad \mbox{ --- v は, 変数名(indeterminate) または Tree のリスト. } \\ & & \quad \mbox{ --- 順序の高い順. } \\ \end{eqnarray*} */ @@ -542,9 +610,9 @@ $\in$ CMObject/RecursivePolynomial \\ \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 monimials. } \\ -& & \mbox{ --- A pair of e and Coefficieint represents a monomial. } \\ +& & \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 } \\ @@ -560,10 +628,10 @@ $\in$ CMObject/RecursivePolynomial \\ \mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\ & & \quad \mbox{ RringDefinition, } \\ & & \quad -\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ +\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} ) \\ \mbox{RringDefinition} & : & \mbox{ {\sl List} v } \\ -& & \quad \mbox{ --- v is a list of names of indeterminates. } \\ +& & \quad \mbox{ --- v is a list of names of indeterminates or trees. } \\ & & \quad \mbox{ --- It is sorted in the decreasing order. } \\ \end{eqnarray*} */ @@ -585,13 +653,14 @@ Example: $$ 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 mail variable $\times$ a coeffcient. +%%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 @@ -613,7 +682,7 @@ Class.recursivePolynomial h * ((-1)) + (x^2 * (1)) \end{verbatim} \noindent -Group CMObject/MachineDouble requires CMObject/Basic0.\\ +Group CMObject/MachineDouble requires CMObject/Primitive.\\ 64bit machine double, Array of 64bit machine double 128bit machine double, Array of 128bit machine double $\in$ CMObject/MachineDouble \\ @@ -622,62 +691,61 @@ $\in$ CMObject/MachineDouble \\ \begin{eqnarray*} \mbox{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{ --- この表現はCPU依存である.}\\ -&& \mbox{\quad\quad mathcap に CPU 情報を付加しておく.} \\ +&& \mbox{\quad\quad 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] は m 個の double (64bit) である. } \\ & & \mbox{ --- この表現はCPU依存である.}\\ -& & \mbox{ \quad\quad mathcap に CPU 情報を付加しておく.} \\ +& & \mbox{ \quad\quad byte order negotiation を用いる.} \\ \mbox{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{ --- この表現はCPU依存である.}\\ -&& \mbox{\quad\quad mathcap に CPU 情報を付加しておく.} \\ +&& \mbox{\quad\quad 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])\\ +& & \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{ --- この表現はCPU依存である.}\\ -& & \mbox{ \quad\quad mathcap に CPU 情報を付加しておく.} +& & \mbox{ \quad\quad byte order negotiation を用いる.} \end{eqnarray*} */ /*&eg \begin{eqnarray*} \mbox{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{ --- This depends on CPU.}\\ -&& \mbox{\quad\quad Add informations on CPU to the mathcap.} \\ +& & \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{ --- This depends on CPU.}\\ -& & \mbox{\quad\quad Add informations on CPU to the mathcap.} \\ +& & \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)\\ +& & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte} s16})\\ & & \mbox{ --- s1, $\ldots$, s16 は {\tt long double} (128bit). } \\ -& & \mbox{ --- This depends on CPU.}\\ -& & \mbox{\quad\quad Add informations on CPU to the mathcap.} \\ +& & \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])\\ +& & \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{ --- This depends on CPU.}\\ -& & \mbox{\quad\quad Add informations on CPU to the mathcap.} \\ +& & \mbox{ --- Encoding depends on CPU.}\\ +& & \mbox{\quad\quad Need the byte order negotiation.} \\ \end{eqnarray*} */ \bigbreak -//&jp 次に IEEE 準拠の float および Big float を定義しよう. -//&eg We define IEEE conformant float and big float. + \begin{verbatim} #define CMO_BIGFLOAT 50 #define CMO_IEEE_DOUBLE_FLOAT 51 @@ -686,14 +754,33 @@ $\in$ CMObject/MachineDouble \\ /*&jp IEEE 準拠の float については, IEEE 754 double precision floating-point 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 IEEE -conformant float. +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 -Group CMObject/Bigfloat requires CMObject/Basic0, CMObject/Basic1.\\ +Group CMObject/Bigfloat requires CMObject/Primitive, CMObject/Basic.\\ Bigfloat $\in$ CMObject/Bigfloat \\