=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v retrieving revision 1.2 retrieving revision 1.16 diff -u -p -r1.2 -r1.16 --- OpenXM/doc/OpenXM-specs/cmo-basic1.tex 2000/01/23 00:41:08 1.2 +++ OpenXM/doc/OpenXM-specs/cmo-basic1.tex 2020/03/14 01:21:56 1.16 @@ -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 $ -//&jp \section{ 数, 多項式 の CMO 表現 } +%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.15 2016/08/22 05:38:27 takayama Exp $ +//&jp \section{ , 紊綣 CMO 茵 } //&eg \section{ CMOexpressions for numbers and polynomials } - +\label{sec:basic1} /*&C @../SSkan/plugin/cmotag.h \begin{verbatim} @@ -14,7 +14,9 @@ #define CMO_RING_BY_NAME 26 #define CMO_DISTRIBUTED_POLYNOMIAL 31 #define CMO_RATIONAL 34 +#define CMO_COMPLEX 35 +#define CMO_BIGFLOAT32 52 #define CMO_INDETERMINATE 60 #define CMO_TREE 61 @@ -24,54 +26,90 @@ */ /*&jp -以下, グループ CMObject/Basic1, CMObject/Tree -および CMObject/DistributedPolynomial -に属する CMObject の形式を説明する. -\noroa{ tagged list を導入すべきか? cf. SSkan/plugin/cmo.txt } +篁ヤ, 違若 CMObject/Basic, CMObject/Tree + CMObject/DistributedPolynomial +絮 CMObject 綵√茯. +\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{ --- bignum をあらわす. a[i] についてはあとで説明}\\ -\mbox{QQ} &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\ -& & \mbox{ --- 有理数 $a/b$ を表す. } \\ +& & \mbox{ --- 若泣 若茵. } \\ +\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 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{ --- $a/b$ 茵. } \\ +\mbox{Bigfloat32} &:& ({\tt CMO\_BIGFLOAT32}, +{\sl int32}\, {\rm prec}, {\sl int32}\, {\rm sign}, {\sl int32}\, {\rm exp}, +{\sl int32}\, \mbox{a[1]}, \ldots , {\sl int32}\, \mbox{a[k]} ) \\ +&:& \mbox{ --- bigfloat . a[i], k ゃц}\\ +\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$ . } \\ +& & \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{Bigfloat32} &:& ({\tt CMO\_BIGFLOAT32}, +{\sl int32}\, {\rm prec}, {\sl int32}\, {\rm sign}, {\sl int32}\, {\rm exp}, +{\sl int32}\, \mbox{a[1]}, \ldots , {\sl int32}\, \mbox{a[k]} ) \\ +&:& \mbox{ --- bigfloat. The meaning of a[i], k 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,83 +117,83 @@ ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B /*&C */ +/*&C +*/ + /*&jp -Indeterminate は変数名をあらわす. -v はバイト列であればなにを用いてもよいが, -システム毎に変数名として用いられるバイト列は制限がある. -各システム xxx は任意の文字列を各システム固有の変数名へ1対1に変換できるように -実装しないといけない. -(これを -{\tt Dx} は {\tt \#dx} と変換するなどの -escape sequence を用いて実現するのは, 無理があるようである. -テーブルを作成する必要があるであろう.) +Indeterminate 紊医. +v ゃс違, +激鴻罸紊医ゃ狗. +激鴻 xxx 篁紙絖激鴻堺紊医1絲1紊с +絎茖. +( +{\tt Dx} {\tt \#dx} 紊 +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}) \\ -& & \mbox{ --- 名前 name の定数または関数. 関数の評価はおこなわない. } \\ -& & \mbox{ --- cdname は空文字列でなければ name の意味が説明されている }\\ -& & \mbox{ --- OpenMath CD (content dictionary) の名前. } \\ + {\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\ +& & \mbox{ --- name 絎違障∽. ∽違荅箴<. } \\ +& & \mbox{ --- attributes 腥冴鴻с name 絮с篆. }\\ +& & \mbox{ --- 絮с鴻, key ゃ≪с. }\\ \mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, {\sl Tree} {\rm body}) \\ -& & \mbox{ --- body を args を引数とする関数とする. } \\ -& & \mbox{ --- optional な引数が必要なときは, leaves の後へつづける.} \\ +& & \mbox{ --- body args 綣違∽違. } \\ \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*} */ -/*&C - -*/ - /*&jp -数式を処理するシステムでは, Tree 構造が一般にもちいられる. -たとえば, $\sin(x+e)$ は, +医激鴻с, Tree 罕筝<. +, $\sin(x+e)$ , {\tt (sin, (plus, x, e))} -なる Tree であらわすのが一般的である. -Tree の表現を スタックマシンのレベルでおこなうとすると, -{\tt ox\_BEGIN\_BLOCK}, {\tt ox\_END\_BLOCK} で評価を抑制するのが -一つの方法である (cf. Postscript の {\tt \{ }, {\tt \} }). -たとえば上の方法では -{\tt x, e, plus, sin } を begin block, end block でかこめばよろしい. -われわれはスタックマシンの実装をなるべく簡単にするという立場をとりたい, -また数学オブジェクトを OX スタックマシンと CMObject を混在して表現したく -ない. -したがって, -Tree 構造は Open Math 風の表現をもちいた CMO を導入することにした. -またこのほうが, われわれの想定するシステム xxx において, Open XM 対応が -はるかに容易である. -なお, Tree は, Open Math では, Symbol, Application のメカニズムに相当する. + Tree с筝с. +Tree 茵憗 鴻帥激潟с, +{\tt ox\_BEGIN\_BLOCK}, {\tt ox\_END\_BLOCK} ц箴<吟 +筝ゃ号с (cf. Postscript {\tt \{ }, {\tt \} }). +遺号с +{\tt x, e, plus, sin } begin block, end block с違. +鴻帥激潟絎茖鴻靎≦腴眼, +障医吾с OX 鴻帥激潟 CMObject 羞桁茵憗 +. +c, +Tree 罕 Open Math 蘂茵憗< CMO 絨ャ. +障祉, 喝激鴻 xxx , Open XM 絲上 +絎号с. +, Tree , Open Math с, Symbol, Application <冴後. */ /*&eg In many computer algebra systems, mathematical expressions are usually @@ -164,7 +202,17 @@ For example, $\sin(x+e)$ is expressed as {\tt (sin, (plus, x, e))} 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. */ @@ -172,68 +220,106 @@ We can @@@ */ /*&jp -Lambda は関数を定義するための関数である. -Lisp の Lambda 表現と同じ. +Lambda ∽違絎臂∽違с. +Lisp Lambda 茵憗. +*/ +/*&eg +Lambda is used to define functions. +The notion ``lambda'' is borrowed from the language Lisp. +*/ \noindent -例: $sin(x+e)$ の表現. +//&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"), - (CMO_TREE,(CMO_STRING, "e"), 自然対数の底 - (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 罨<, h;憜綣≫違若絎臂. +/*&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. \\ +/*&jp \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] で, $n$ 変数 monomial -$x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ -をあらわす.} \\ +& & \mbox{ --- e[i] , $n$ 紊 monomial +$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}], \\ & &\ \ \{\mbox{Monomial32}\}) \\ -& &\mbox{--- m はモノミアルの個数である.}\\ +& &\mbox{--- m ≪≪違с.}\\ \mbox{DringDefinition} &:& \mbox{DMS of N variables} \\ & & |\ \mbox{RingByName} \\ & & |\ \mbox{Generic DMS ring} \\ -& & \mbox{ --- 分散表現多項式環の定義. } \\ +& & \mbox{ --- h;憜綣違絎臂. } \\ \mbox{Generic DMS ring} -&:& \mbox{({\tt CMO\_DMS\_GENERIC}) --- 新版はこちら}\\ +&:& \mbox{({\tt CMO\_DMS\_GENERIC}) --- 亥<}\\ \mbox{RingByName}&:& ({\tt CMO\_RING\_BY\_NAME}, {\sl Cstring}\ {\rm s}) \\ -& & \mbox{ --- 名前 s で, 格納された ring 定義.} \\ +& & \mbox{ --- s , 主 ring 絎臂.} \\ \mbox{DMS of N variables} &:& ({\tt CMO\_DMS\_OF\_N\_VARIABLES}, \\ & & \ ({\tt CMO\_LIST}, {\sl int32}\, \mbox{m}, @@ -241,116 +327,218 @@ $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ & & \ \ [,{\sl object}\,\mbox{s}, {\sl Cstring}\,\mbox{c}, {\sl List}\, \mbox{vlist}, {\sl List}\, \mbox{wvec}, {\sl List}\, \mbox{outord}]) \\ -& & \mbox{ --- m はあとに続く要素の数} \\ -& & \mbox{ --- n は変数の数, p は 標数} \\ -& & \mbox{ --- s は ring の名前} \\ -& & \mbox{ --- c は係数環, QQ, ZZ の場合は文字列で QQ, ZZ と書く.} \\ -& & \mbox{ --- vlist は Indeterminate のリスト(新版). 多項式環の変数リスト} \\ -& & \mbox{ --- wvec は order をきめる weight vector,} \\ -& & \mbox{ --- outord は出力するときの変数順序.} \\ +& & \mbox{ --- m 膓頳膣} \\ +& & \mbox{ --- n 紊違, p 罔} \\ +& & \mbox{ --- s ring } \\ +& & \mbox{ --- c 篆亥, QQ, ZZ 翫絖 QQ, ZZ 吾.} \\ +& & \mbox{ --- vlist Indeterminate 鴻(亥). 紊綣違紊違鴻} \\ +& & \mbox{ --- wvec order weight vector,} \\ +& & \mbox{ --- outord 阪紊育綺.} \\ \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*} +*/ -RingByName や DMS of N variables はなくても, DMS を定義できる. -したがって, これらを実装してないシステムで DMS を扱うものが -あってもかまわない. +/*&jp +RingByName DMS of N variables , DMS 絎臂с. +c, 絎茖激鴻 DMS 宴 +c障. -以下, 以上の CMObject にたいする, -xxx = asir, kan の振舞いを記述する. +篁ヤ, 篁ヤ CMObject , +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} -CMO では ゼロの表現法がなんとうりもあるが, -どのようなゼロをうけとっても, -システムのゼロに変換できるべきである. -(たとえば, asir は 0 はただ一つ.) +/*&jp +CMO с 若茵憝羈. +%% 若c, +%% 激鴻若紊с鴻с. +*/ +/*&eg +Note that CMO has various representations of zero. +*/ +//&jp \subsection{ 贋 ZZ } +//&eg \subsection{ Integer ZZ } -\subsection{ 整数 ZZ } - \begin{verbatim} #define CMO_ZZ 20 \end{verbatim} +/*&jp +膀сOpen xxx 荀靘篁紙紊с贋(bignum)宴ゃ +茯. Open XM 荀靘紊膕上墾贋違茵若水 CMO\_ZZ +GNU MPゃ荐荐, 膃垬腟九上よ;憗 +. (cf. {\tt kan/sm1} 絽c {\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|} \hline {\tt int32 CMO\_ZZ} & {\tt int32 $f$} & {\tt int32 $b_0$} & $\cdots$ & {\tt int32 $b_{n}$} \\ \hline -\end{tabular} \\ -$f$ は32bit整数である. -$b_0, \ldots, b_n$ は unsigned int32 である. -$|f|$ は $n+1$ である. -この CMO の符号は $f$ の符号で定める. -前述したように, 32bit整数の負数は 2 の補数表現で表される. +\end{tabular} -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). \] -ここで $R = 2^{32}$ である. -{\tt int32} を network byte order で表現しているとすると, -例えば, 整数 $14$ は CMO\_ZZ で表わすと, + +/*&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 +*/ \[ \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} \] -となる. +//&jp . -なお ZZ の 0 ( (ZZ) 0 と書く ) は, -{\tt (CMO\_ZZ, 00,00,00,00)} -と表現する. +//&jp ZZ 0 ( (ZZ) 0 吾 ) , {\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{ h;憜綣 Dpolynomial } +//&eg \subsection{ Distributed polynomial Dpolynomial } -環とそれに属する多項式は次のような考えかたであつかう. +/*&jp +違絮紊綣罨<сゃ. -Generic DMS ring に属する元は, -変数を $n$ 個持つ 適当な係数集合 $K$ を持つ多項式環 $K[x_1, \ldots, x_n]$ -の元である. -係数集合 $K$ がなにかは, 実際データを読み込み, Coefficient を見た段階で -わかる. -この環に属する多項式を CMO 形式でうけとった場合, 各サーバはその -サーバの対応する Object に変換しないといけない. -この変換の仕方は, 各サーバ毎にきめる. +Generic DMS ring 絮, +紊違 $n$ 綵篆育 $K$ ゅ綣 $K[x_1, \ldots, x_n]$ +с. +篆育 $K$ , 絎若帥茯粋昭, Coefficient 荀罧級 +. +違絮紊綣 CMO 綵√сc翫, 泣若 +泣若絲上 Object 紊. +紊篁鴻, 泣若罸. -Asir の場合は, $K[x_1, \ldots, x_n]$ の元は分散表現多項式に変換される. -\noroa{ でも, order はどうなるの? } +Asir 翫, $K[x_1, \ldots, x_n]$ h;憜綣紊. +\noroa{ с, order ? } -{\tt kan/sm1} の場合は事情は複雑である. -{\tt kan/sm1} は, Generic DMS ring にあたる クラスをもたない. -つまり, Default で存在する, $n$ 変数の分散表現多項式環は存在しないわけである. -したがって, {\tt kan/sm1} では, DMS of N variables が来た場合, -これを CurrentRing の元として読み込む. CurrentRing の変数の数が $n'$ -で, $n' < n$ だと新しい多項式環を生成してデータを読み込む. -Order その他の optional 情報はすべて無視する. +{\tt kan/sm1} 翫篋茲с. +{\tt kan/sm1} , Generic DMS ring 鴻. +ゃ障, Default у, $n$ 紊違h;憜綣違絖с. +c, {\tt kan/sm1} с, DMS of N variables ャ翫, + CurrentRing 茯粋昭. CurrentRing 紊違違 $n'$ +, $n' < n$ 違紊綣違若帥茯粋昭. +Order 篁 optional 宴鴻∴. -DMS の 2 番目のフィールドで, -Ring by Name を用いた場合, 現在の名前空間で変数 yyy に格納された ring object -の元として, この多項式を変換しなさいという意味になる. -{\tt kan/sm1} の場合, 環の定義は ring object として格納されており, -この ring object を 変数 yyy で参照することにより CMO としてうけとった -多項式をこの ring の元として格納できる. +DMS 2 c若, +Ring by Name 翫, 憜腥咲у yyy 主 ring object +, 紊綣紊潟. +{\tt kan/sm1} 翫, 違絎臂 ring object 主, + ring object 紊 yyy ус CMO c +紊綣 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 -{\bf Example}: -(すべての数の表記は 16 進表記) +//&jp {\bf Example}: (鴻違茵荐 16 画;荐) +//&eg {\bf Example}: (all numbers are represented in hexadecimal notation) {\footnotesize \begin{verbatim} Z/11Z [6 variables] (kxx/cmotest.sm1) run @@ -369,59 +557,88 @@ ff omc :: (CMO_DISTRIBUTED_POLYNOMIAL[1f],[size=]1,(CMO_DMS_GENERIC[18],), (CMO_MONOMIAL32[13],3*x^2*y),), \end{verbatim} } -length は, monomial の数$+2$ である. -$ 3 x^2 y$ は 6 変数の多項式環の元としてみなされている. -%%Prog: (3x^2 y). cmosave ===> debug/cmodata1.cmo -%%\\ 反省: 分散多項式の定義で, -%%{\tt CMO\_LIST} でなく, {\tt CMO\_DMS} がはじめにくるべきだったのでは? -%%あたらしい 分散多項式の定義は次のようにすべき: -%% 修正済み. 1999, 9/13 +/*&jp +$ 3 x^2 y$ 6 紊違紊綣違 帥. +*/ +/*&eg +$3 x^2 y$ is regarded as an element of a six-variate polynomial ring. +*/ +//&jp \subsection{絽域;憜綣絎臂} +//&eg \subsection{Recursive polynomials} -\subsection{再帰表現多項式の定義} - \begin{verbatim} #define CMO_RECURSIVE_POLYNOMIAL 27 #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 \\ +/*&jp \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 はモノミアルの個数. } \\ -& & \mbox{ --- e, Coefficieint はモノミアルを表現している. } \\ -& & \mbox{ --- 順序の高い順にならべる. 普通は巾の高い順.} \\ -& & \mbox{ --- e は 1変数多項式の巾をあらわす. } \\ +& & \quad \mbox{ \{ {\sl int32} e, Coefficient \}} ) \\ +& & \mbox{ --- m ≪≪. } \\ +& & \mbox{ --- e, Coefficieint ≪≪茵憗. } \\ +& & \mbox{ --- 綺蕭鴻. 綏障蕭.} \\ +& & \mbox{ --- e 1紊医綣綏障. } \\ \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 は 変数番号 (0 からはじまる) を表す. } \\ +& & \mbox{ --- v 紊亥 (0 障) 茵. } \\ \mbox{Recursive Polynomial} &:& \mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\ -& & \quad \mbox{ Ring definition for -recursive polynomials, } \\ +& & \quad \mbox{ RringDefinition, } \\ & & \quad -\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ -\mbox{Ring definition for recursive polynomials } +\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} ) \\ +\mbox{RringDefinition} & : & \mbox{ {\sl List} v } \\ -& & \quad \mbox{ --- v は, 変数名(indeterminate) のリスト. } \\ -& & \quad \mbox{ --- 順序の高い順. } \\ +& & \quad \mbox{ --- v , 紊医(indeterminate) 障 Tree 鴻. } \\ +& & \quad \mbox{ --- 綺蕭. } \\ \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 \noindent -実例: +Example: \begin{verbatim} (CMO_RECURSIEVE_POLYNOMIAL, ("x","y"), (CMO_POLYNOMIAL_IN_ONE_VARIABLE, 2, 0, <--- "x" @@ -432,12 +649,21 @@ recursive polynomials, } \\ 10, 1, 5, 31))) \end{verbatim} -これは, -$$ x^3 (1234 y^5 + 17 ) + x^1 (y^10 + 31 y^5) $$ -をあらわす. -非可換多項式もこの形式であらわしたいので, 積の順序を上のように -すること. つまり, 主変数かける係数の順番. +//&jp , +//&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 \begin{verbatim} sm1 @@ -446,16 +672,9 @@ sm1>ff :: Class.recursivePolynomial h * ((-1)) + (x^2 * (1)) \end{verbatim} +//&jp \subsection{CPU箴絖 double } +//&eg \subsection{CPU dependent double} - -int32 と Integer32 の違い. -次にくるデータがかならず int32 とわかっておれば, -int32 を用いる. -次のデータ型がわからないとき Integer32 を用いる. - - -\subsection{CPU依存の double } - \begin{verbatim} #define CMO_64BIT_MACHINE_DOUBLE 40 #define CMO_ARRAY_OF_64BIT_MACHINE_DOUBLE 41 @@ -464,60 +683,144 @@ int32 を用いる. \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 \\ +/*&jp \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{ --- この表現はCPU依存である.}\\ -&& \mbox{\quad\quad mathcap に CPU 情報を付加しておく.} \\ +& & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte} s8})\\ +& & \mbox{ --- s1, $\ldots$, s8 {\tt double} (64bit). } \\ +& & \mbox{ --- 茵憗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{ --- s*[1], $\ldots$ s*[m] m double (64bit) с. } \\ +& & \mbox{ --- 茵憗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)\\ -& & \mbox{ --- s1, $\ldots$, s16 は {\tt long double} (128bit). } \\ -& & \mbox{ --- この表現はCPU依存である.}\\ -&& \mbox{\quad\quad mathcap に CPU 情報を付加しておく.} \\ +& & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte} s16})\\ +& & \mbox{ --- s1, $\ldots$, s16 {\tt long double} (128bit). } \\ +& & \mbox{ --- 茵憗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])\\ -& & \mbox{ --- s*[1], $\ldots$ s*[m] は m 個の long double (128bit) である. } \\ -& & \mbox{ --- この表現はCPU依存である.}\\ -& & \mbox{ \quad\quad mathcap に CPU 情報を付加しておく.} +& & \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 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})\\ +& & \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 -次に IEEE 準拠の float および Big float を定義しよう. + \begin{verbatim} -#define CMO_BIGFLOAT 50 #define CMO_IEEE_DOUBLE_FLOAT 51 \end{verbatim} -IEEE 準拠の float については, -IEEE 754 double precision floating-point format -(64 bit) の定義を見よ. +/*&jp +IEEE 羣 float ゃ, IEEE 754 double precision floating-point +format (64 bit) 絎臂荀. -\noindent -Group CMObject/Bigfloat requires CMObject/Basic0, CMObject/Basic1.\\ -Bigfloat -$\in$ CMObject/Bigfloat \\ +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 綺絎. -\begin{eqnarray*} -\mbox{Bigfloat} &:& -\mbox{({\tt CMO\_BIGFLOAT}, } \\ -& & \quad \mbox{ {\sl ZZ} a , {\sl ZZ} e})\\ -& & \mbox{ --- $a \times 2^e$ をあらわす. } \\ -\end{eqnarray*} +*/ +/*&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. + */ + +\subsection{Bigfloat32} +/*&jp +int32 堺 bigfloat 茵憝号ゃ菴違鴻. +綵√ mpfr 32bit CPU т戎茵憗演с. +*/ +/*&eg +This subsection describes our format for bigfloat in terms of the int32. +This format is identical to the internal format of mpfr on 32 bit CPU's. +*/ +Ref: {\tt OpenXM/src/mpfr/bfsize/bfsize.c} + +\begin{verbatim} +#define CMO_BIGFLOAT32 52 +\end{verbatim} + + +/*&jp +Bigfloat32 罨<綵√ int32 с. +*/ +/*&eg +The bigfloat32 is an array of int32 numbers of the following format. +*/ + +\begin{center} +{\sl int32}\, {\rm prec}, {\sl int32}\, {\rm sign}, {\sl int32}\, {\rm exp}, +{\sl int32}\, \mbox{a[1]}, \ldots , {\sl int32}\, \mbox{a[k]} +\end{center} + +/*&jp +p=prec 膕上墾, s=sign 膃(1 罩c, -1 (2茖域;)莢) , +E=exp 育, 筝若帥 +$$ s (a[k]/B + a[k-1]/B^2 + ... + a[1]/B^k) 2^E $$ +茵. + $B=2^{32}$, +$k = \lceil p/32 \rceil$ +с. +*/ +/*&eg +p=prec is the precision, s=sign is the sign(1 means positive, -1 (expressed by two's complement) is nevative), +E=exp is the exponent, and the data above expresses the number +$$ s (a[k]/B + a[k-1]/B^2 + ... + a[1]/B^k) 2^E. $$ +Here, $B=2^{32}$, +$k = \lceil p/32 \rceil$. +*/ +