version 1.15, 2016/08/22 05:38:27 |
version 1.16, 2020/03/14 01:21:56 |
|
|
%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.14 2015/08/18 02:54:05 noro Exp $ |
%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.15 2016/08/22 05:38:27 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} |
\label{sec:basic1} |
/*&C |
/*&C |
|
|
*/ |
*/ |
|
|
/*&jp |
/*&jp |
以下, グループ CMObject/Basic, CMObject/Tree |
篁ヤ, 違若 CMObject/Basic, CMObject/Tree |
および CMObject/DistributedPolynomial |
CMObject/DistributedPolynomial |
に属する CMObject の形式を説明する. |
絮 CMObject 綵√茯. |
|
|
\noindent |
\noindent |
{\tt OpenXM/src/ox\_toolkit} にある {\tt bconv} をもちいると |
{\tt OpenXM/src/ox\_toolkit} {\tt bconv} < |
CMO expression を binary format に変換できるので, |
CMO expression binary format 紊с, |
これを参考にするといい. |
. |
*/ |
*/ |
/*&eg |
/*&eg |
In the sequel, we will explain on the groups |
In the sequel, we will explain on the groups |
Line 64 Group CMObject/Basic requires CMObject/Primitive. \\ |
|
Line 64 Group CMObject/Basic requires CMObject/Primitive. \\ |
|
ZZ, QQ, Zero, Rational, Indeterminate $\in$ CMObject/Basic. \\ |
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[$|$f$|$]} ) \\ |
{\sl byte}\, \mbox{a[$|$f$|$]} ) \\ |
&:& \mbox{ --- bignum をあらわす. a[i] についてはあとで説明}\\ |
&:& \mbox{ --- bignum . a[i] ゃц}\\ |
\mbox{QQ} &:& ({\tt CMO\_QQ}, |
\mbox{QQ} &:& ({\tt CMO\_QQ}, |
{\sl int32}\, {\rm m}, {\sl byte}\, \mbox{a[1]}, \ldots, {\sl byte}\, \mbox{a[$|$m$|$]}, |
{\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$|$]})\\ |
{\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{Bigfloat32} &:& ({\tt CMO\_BIGFLOAT32}, |
\mbox{Bigfloat32} &:& ({\tt CMO\_BIGFLOAT32}, |
{\sl int32}\, {\rm prec}, {\sl int32}\, {\rm sign}, {\sl int32}\, {\rm exp}, |
{\sl int32}\, {\rm prec}, {\sl int32}\, {\rm sign}, {\sl int32}\, {\rm exp}, |
{\sl int32}\, \mbox{a[1]}, \ldots , {\sl int32}\, \mbox{a[k]} ) \\ |
{\sl int32}\, \mbox{a[1]}, \ldots , {\sl int32}\, \mbox{a[k]} ) \\ |
&:& \mbox{ --- bigfloat をあらわす. a[i], k についてはあとで説明}\\ |
&:& \mbox{ --- bigfloat . a[i], k ゃц}\\ |
\mbox{Complex} &:& ({\tt CMO\_COMPLEX}, {\sl CMObject}\, {\rm re}, {\sl CMObject}\, {\rm im}) \\ |
\mbox{Complex} &:& ({\tt CMO\_COMPLEX}, {\sl CMObject}\, {\rm re}, {\sl CMObject}\, {\rm im}) \\ |
& & \mbox{ --- $a+b\sqrt{-1}$ を表す. } \\ |
& & \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*} |
*/ |
*/ |
|
|
Line 122 ZZ, QQ, Zero, Rational, Indeterminate $\in$ CMObject/B |
|
Line 122 ZZ, QQ, Zero, Rational, Indeterminate $\in$ CMObject/B |
|
*/ |
*/ |
|
|
/*&jp |
/*&jp |
Indeterminate は変数名をあらわす. |
Indeterminate 紊医. |
v はバイト列であればなにを用いてもよいが, |
v ゃс違, |
システム毎に変数名として用いられるバイト列は制限がある. |
激鴻罸紊医ゃ狗. |
各システム xxx は任意の文字列を各システム固有の変数名へ1対1に変換できるように |
激鴻 xxx 篁紙絖激鴻堺紊医1絲1紊с |
実装しないといけない. |
絎茖. |
(これを |
( |
{\tt Dx} は {\tt \#dx} と変換するなどの |
{\tt Dx} {\tt \#dx} 紊 |
escape sequence を用いて実現するのは, 無理があるようである. |
escape sequence 絎憗, ∞с. |
テーブルを作成する必要があるであろう.) |
若篏綽荀с.) |
*/ |
*/ |
/*&eg |
/*&eg |
The name of a variable should be expressed by using Indeterminate. |
The name of a variable should be expressed by using Indeterminate. |
Line 142 in one-to-one correspondence. |
|
Line 142 in one-to-one correspondence. |
|
|
|
|
|
/*&jp |
/*&jp |
\subsection{Indeterminate および Tree} |
\subsection{Indeterminate Tree} |
|
|
\noindent |
\noindent |
Group CMObject/Tree requires CMObject/Basic. \\ |
Group CMObject/Tree requires CMObject/Basic. \\ |
Line 150 Tree, Lambda $\in$ CMObject/Tree. \\ |
|
Line 150 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 List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\ |
{\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\ |
& & \mbox{ --- 名前 name の定数または関数. 関数の評価はおこなわない. } \\ |
& & \mbox{ --- name 絎違障∽. ∽違荅箴<. } \\ |
& & \mbox{ --- attributes は空リストでなければ name の属性を保持している. }\\ |
& & \mbox{ --- attributes 腥冴鴻с name 絮с篆. }\\ |
& & \mbox{ --- 属性リストは, key と 値のペアである. }\\ |
& & \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 綣違∽違. } \\ |
\end{eqnarray*} |
\end{eqnarray*} |
*/ |
*/ |
/*&eg |
/*&eg |
Line 177 Tree, Lambda $\in$ CMObject/Tree. \\ |
|
Line 177 Tree, Lambda $\in$ CMObject/Tree. \\ |
|
*/ |
*/ |
|
|
/*&jp |
/*&jp |
数式を処理するシステムでは, Tree 構造が一般にもちいられる. |
医激鴻с, Tree 罕筝<. |
たとえば, $\sin(x+e)$ は, |
, $\sin(x+e)$ , |
{\tt (sin, (plus, x, e))} |
{\tt (sin, (plus, x, e))} |
なる Tree であらわすのが一般的である. |
Tree с筝с. |
Tree の表現を スタックマシンのレベルでおこなうとすると, |
Tree 茵憗 鴻帥激潟с, |
{\tt ox\_BEGIN\_BLOCK}, {\tt ox\_END\_BLOCK} で評価を抑制するのが |
{\tt ox\_BEGIN\_BLOCK}, {\tt ox\_END\_BLOCK} ц箴<吟 |
一つの方法である (cf. Postscript の {\tt \{ }, {\tt \} }). |
筝ゃ号с (cf. Postscript {\tt \{ }, {\tt \} }). |
たとえば上の方法では |
遺号с |
{\tt x, e, plus, sin } を begin block, end block でかこめばよろしい. |
{\tt x, e, plus, sin } begin block, end block с違. |
われわれはスタックマシンの実装をなるべく簡単にするという立場をとりたい, |
鴻帥激潟絎茖鴻靎≦腴眼, |
また数学オブジェクトを OX スタックマシンと CMObject を混在して表現したく |
障医吾с OX 鴻帥激潟 CMObject 羞桁茵憗 |
ない. |
. |
したがって, |
c, |
Tree 構造は Open Math 風の表現をもちいた CMO を導入することにした. |
Tree 罕 Open Math 蘂茵憗< CMO 絨ャ. |
またこのほうが, われわれの想定するシステム xxx において, Open XM 対応が |
障祉, 喝激鴻 xxx , Open XM 絲上 |
はるかに容易である. |
絎号с. |
なお, Tree は, Open Math では, Symbol, Application のメカニズムに相当する. |
, Tree , Open Math с, Symbol, Application <冴後. |
*/ |
*/ |
/*&eg |
/*&eg |
In many computer algebra systems, mathematical expressions are usually |
In many computer algebra systems, mathematical expressions are usually |
Line 220 Note that CMO Tree corresponds to Symbol and Applicati |
|
Line 220 Note that CMO Tree corresponds to Symbol and Applicati |
|
|
|
*/ |
*/ |
/*&jp |
/*&jp |
Lambda は関数を定義するための関数である. |
Lambda ∽違絎臂∽違с. |
Lisp の Lambda 表現と同じ. |
Lisp Lambda 茵憗. |
*/ |
*/ |
/*&eg |
/*&eg |
Lambda is used to define functions. |
Lambda is used to define functions. |
Line 229 The notion ``lambda'' is borrowed from the language Li |
|
Line 229 The notion ``lambda'' is borrowed from the language Li |
|
*/ |
*/ |
|
|
\noindent |
\noindent |
//&jp 例: $sin(x+e)$ の表現. |
//&jp 箴: $sin(x+e)$ 茵. |
//&eg Example: the expression of $sin(x+e)$. |
//&eg Example: the expression of $sin(x+e)$. |
\begin{verbatim} |
\begin{verbatim} |
(CMO_TREE, (CMO_STRING, "sin"), |
(CMO_TREE, (CMO_STRING, "sin"), |
Line 238 The notion ``lambda'' is borrowed from the language Li |
|
Line 238 The notion ``lambda'' is borrowed from the language Li |
|
(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"), |
//&jp (CMO_TREE,(CMO_STRING, "e"), 自然対数の底 |
//&jp (CMO_TREE,(CMO_STRING, "e"), 九丈違綺 |
//&eg (CMO_TREE,(CMO_STRING, "e"), the base of natural logarithms |
//&eg (CMO_TREE,(CMO_STRING, "e"), the base of natural logarithms |
(CMO_LIST,[size=]1,(CMO_LIST,[size=]2,(CMO_STRING, "cdname"), |
(CMO_LIST,[size=]1,(CMO_LIST,[size=]2,(CMO_STRING, "cdname"), |
(CMO_STRING,"basic"))) |
(CMO_STRING,"basic"))) |
Line 246 The notion ``lambda'' is borrowed from the language Li |
|
Line 246 The notion ``lambda'' is borrowed from the language Li |
|
) |
) |
) |
) |
\end{verbatim} |
\end{verbatim} |
//&jp Leave の成分には, 多項式を含む任意のオブジェクトがきてよい. |
//&jp Leave , 紊綣篁紙吾с. |
//&eg Elements of the leave may be any objects including polynomials. |
//&eg Elements of the leave may be any objects including polynomials. |
|
|
\noindent |
\noindent |
|
|
|
|
|
|
\bigbreak |
\bigbreak |
//&jp 次に, 分散表現多項式に関係するグループを定義しよう. |
//&jp 罨<, h;憜綣≫違若絎臂. |
/*&eg |
/*&eg |
Let us define a group for distributed polynomials. In the following, |
Let us define a group for distributed polynomials. In the following, |
DMS stands for Distributed Monomial System. |
DMS stands for Distributed Monomial System. |
Line 300 CMObject/DistributedPolynomials. \\ |
|
Line 300 CMObject/DistributedPolynomials. \\ |
|
{\sl int32}\, \mbox{e[1]}, \ldots, |
{\sl int32}\, \mbox{e[1]}, \ldots, |
{\sl int32}\, \mbox{e[n]}, \\ |
{\sl int32}\, \mbox{e[n]}, \\ |
& & \ \mbox{Coefficient}) \\ |
& & \ \mbox{Coefficient}) \\ |
& & \mbox{ --- e[i] で, $n$ 変数 monomial |
& & \mbox{ --- e[i] , $n$ 紊 monomial |
$x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ |
$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, \\ |
Line 310 $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ |
|
Line 310 $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ |
|
[\mbox{Monomial32}|\mbox{Zero}], \\ |
[\mbox{Monomial32}|\mbox{Zero}], \\ |
& &\ \ |
& &\ \ |
\{\mbox{Monomial32}\}) \\ |
\{\mbox{Monomial32}\}) \\ |
& &\mbox{--- m はモノミアルの個数である.}\\ |
& &\mbox{--- m ≪≪違с.}\\ |
\mbox{DringDefinition} |
\mbox{DringDefinition} |
&:& \mbox{DMS of N variables} \\ |
&:& \mbox{DMS of N variables} \\ |
& & |\ \mbox{RingByName} \\ |
& & |\ \mbox{RingByName} \\ |
& & |\ \mbox{Generic DMS ring} \\ |
& & |\ \mbox{Generic DMS ring} \\ |
& & \mbox{ --- 分散表現多項式環の定義. } \\ |
& & \mbox{ --- h;憜綣違絎臂. } \\ |
\mbox{Generic DMS ring} |
\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{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} |
&:& ({\tt CMO\_DMS\_OF\_N\_VARIABLES}, \\ |
&:& ({\tt CMO\_DMS\_OF\_N\_VARIABLES}, \\ |
& & \ ({\tt CMO\_LIST}, {\sl int32}\, \mbox{m}, |
& & \ ({\tt CMO\_LIST}, {\sl int32}\, \mbox{m}, |
Line 327 $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ |
|
Line 327 $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ |
|
& & \ \ [,{\sl object}\,\mbox{s}, {\sl Cstring}\,\mbox{c}, |
& & \ \ [,{\sl object}\,\mbox{s}, {\sl Cstring}\,\mbox{c}, |
{\sl List}\, \mbox{vlist}, |
{\sl List}\, \mbox{vlist}, |
{\sl List}\, \mbox{wvec}, {\sl List}\, \mbox{outord}]) \\ |
{\sl List}\, \mbox{wvec}, {\sl List}\, \mbox{outord}]) \\ |
& & \mbox{ --- m はあとに続く要素の数} \\ |
& & \mbox{ --- m 膓頳膣} \\ |
& & \mbox{ --- n は変数の数, p は 標数} \\ |
& & \mbox{ --- n 紊違, p 罔} \\ |
& & \mbox{ --- s は ring の名前} \\ |
& & \mbox{ --- s ring } \\ |
& & \mbox{ --- c は係数環, QQ, ZZ の場合は文字列で QQ, ZZ と書く.} \\ |
& & \mbox{ --- c 篆亥, QQ, ZZ 翫絖 QQ, ZZ 吾.} \\ |
& & \mbox{ --- vlist は Indeterminate のリスト(新版). 多項式環の変数リスト} \\ |
& & \mbox{ --- vlist Indeterminate 鴻(亥). 紊綣違紊違鴻} \\ |
& & \mbox{ --- wvec は order をきめる weight vector,} \\ |
& & \mbox{ --- wvec order weight vector,} \\ |
& & \mbox{ --- outord は出力するときの変数順序.} \\ |
& & \mbox{ --- outord 阪紊育綺.} \\ |
\end{eqnarray*} |
\end{eqnarray*} |
*/ |
*/ |
/*&eg |
/*&eg |
Line 376 $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ |
|
Line 376 $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$ |
|
*/ |
*/ |
|
|
/*&jp |
/*&jp |
RingByName や DMS of N variables はなくても, DMS を定義できる. |
RingByName DMS of N variables , DMS 絎臂с. |
したがって, これらを実装してないシステムで DMS を扱うものが |
c, 絎茖激鴻 DMS 宴 |
あってもかまわない. |
c障. |
|
|
以下, 以上の CMObject にたいする, |
篁ヤ, 篁ヤ CMObject , |
xxx = asir, kan の振舞いを記述する. |
xxx = asir, kan 荐菴違. |
*/ |
*/ |
/*&eg |
/*&eg |
Note that it is possible to define DMS without RingByName and |
Note that it is possible to define DMS without RingByName and |
Line 393 are implemented on Asir and Kan. |
|
Line 393 are implemented on Asir and Kan. |
|
|
|
\subsection{ Zero} |
\subsection{ Zero} |
/*&jp |
/*&jp |
CMO では ゼロの表現法がなんとおりもあることに注意. |
CMO с 若茵憝羈. |
%% どのようなゼロをうけとっても, |
%% 若c, |
%% システムのゼロに変換できるべきである. |
%% 激鴻若紊с鴻с. |
*/ |
*/ |
/*&eg |
/*&eg |
Note that CMO has various representations of zero. |
Note that CMO has various representations of zero. |
*/ |
*/ |
|
|
|
|
//&jp \subsection{ 整数 ZZ } |
//&jp \subsection{ 贋 ZZ } |
//&eg \subsection{ Integer ZZ } |
//&eg \subsection{ Integer ZZ } |
|
|
\begin{verbatim} |
\begin{verbatim} |
Line 410 Note that CMO has various representations of zero. |
|
Line 410 Note that CMO has various representations of zero. |
|
\end{verbatim} |
\end{verbatim} |
|
|
/*&jp |
/*&jp |
この節ではOpen xxx 規約における任意の大きさの整数(bignum)の扱いについ |
膀сOpen xxx 荀靘篁紙紊с贋(bignum)宴ゃ |
て説明する. Open XM 規約における多重精度整数を表すデータ型 CMO\_ZZ は |
茯. Open XM 荀靘紊膕上墾贋違茵若水 CMO\_ZZ |
GNU MPライブラリなどを参考にして設計されていて, 符号付き絶対値表現を用 |
GNU MPゃ荐荐, 膃垬腟九上よ;憗 |
いている. (cf. {\tt kan/sm1} の配布ディレクトリのなかの {\tt |
. (cf. {\tt kan/sm1} 絽c {\tt |
plugin/cmo-gmp.c}) CMO\_ZZ は次の形式をとる. |
plugin/cmo-gmp.c}) CMO\_ZZ 罨<綵√. |
*/ |
*/ |
/*&eg |
/*&eg |
We describe the bignum (multi-precision integer) representation |
We describe the bignum (multi-precision integer) representation |
Line 432 distribution). CMO\_ZZ is defined as follows. |
|
Line 432 distribution). CMO\_ZZ is defined as follows. |
|
\end{tabular} |
\end{tabular} |
|
|
/*&jp |
/*&jp |
$f$ は32bit整数である. $b_0, \ldots, b_n$ は unsigned int32 である. |
$f$ 32bit贋違с. $b_0, \ldots, b_n$ unsigned int32 с. |
$|f|$ は $n+1$ である. この CMO の符号は $f$ の符号で定める. 前述し |
$|f|$ $n+1$ с. CMO 膃垩 $f$ 膃垩у. 菴違 |
たように, 32bit整数の負数は 2 の補数表現で表される. |
, 32bit贋違莢違 2 茖域;憗ц;. |
|
|
Open xxx 規約では上の CMO は以下の整数を意味する. ($R = 2^{32}$) |
Open xxx 荀靘с筝 CMO 篁ヤ贋違潟. ($R = 2^{32}$) |
*/ |
*/ |
/*&eg |
/*&eg |
$f$ is a 32bit integer. $b_0, \ldots, b_n$ are unsigned 32bit integers. |
$f$ is a 32bit integer. $b_0, \ldots, b_n$ are unsigned 32bit integers. |
Line 454 In OpenXM the above CMO represents the following integ |
|
Line 454 In OpenXM the above CMO represents the following integ |
|
\] |
\] |
|
|
/*&jp |
/*&jp |
\noindent 例: |
\noindent 箴: |
{\tt int32} を network byte order で表現 |
{\tt int32} network byte order ц; |
しているとすると,例えば, 整数 $14$ は CMO\_ZZ で表わすと, |
,箴, 贋 $14$ CMO\_ZZ ц;, |
*/ |
*/ |
/*&eg |
/*&eg |
\noindent Example: |
\noindent Example: |
Line 466 a CMO\_ZZ $14$ is expressed by |
|
Line 466 a CMO\_ZZ $14$ is expressed by |
|
\[ |
\[ |
\mbox{(CMO\_ZZ, 1, 0, 0, 0, e)}, |
\mbox{(CMO\_ZZ, 1, 0, 0, 0, e)}, |
\] |
\] |
//&jp と表わす. これはバイト列では |
//&jp 茵. ゃс |
//&eg The corresponding byte sequence is |
//&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 となる. |
//&jp . |
|
|
|
|
//&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)}. |
//&eg Note that CMO\_ZZ 0 is expressed by {\tt (CMO\_ZZ, 00,00,00,00)}. |
|
|
|
|
//&jp \subsection{ 分散表現多項式 Dpolynomial } |
//&jp \subsection{ h;憜綣 Dpolynomial } |
//&eg \subsection{ Distributed polynomial Dpolynomial } |
//&eg \subsection{ Distributed polynomial Dpolynomial } |
|
|
/*&jp |
/*&jp |
環とそれに属する多項式は次のような考えかたであつかう. |
違絮紊綣罨<сゃ. |
|
|
Generic DMS ring に属する元は, |
Generic DMS ring 絮, |
変数を $n$ 個持つ 適当な係数集合 $K$ を持つ多項式環 $K[x_1, \ldots, x_n]$ |
紊違 $n$ 綵篆育 $K$ ゅ綣 $K[x_1, \ldots, x_n]$ |
の元である. |
с. |
係数集合 $K$ がなにかは, 実際データを読み込み, Coefficient を見た段階で |
篆育 $K$ , 絎若帥茯粋昭, Coefficient 荀罧級 |
わかる. |
. |
この環に属する多項式を CMO 形式でうけとった場合, 各サーバはその |
違絮紊綣 CMO 綵√сc翫, 泣若 |
サーバの対応する Object に変換しないといけない. |
泣若絲上 Object 紊. |
この変換の仕方は, 各サーバ毎にきめる. |
紊篁鴻, 泣若罸. |
|
|
Asir の場合は, $K[x_1, \ldots, x_n]$ の元は分散表現多項式に変換される. |
Asir 翫, $K[x_1, \ldots, x_n]$ h;憜綣紊. |
\noroa{ でも, order はどうなるの? } |
\noroa{ с, order ? } |
|
|
{\tt kan/sm1} の場合は事情は複雑である. |
{\tt kan/sm1} 翫篋茲с. |
{\tt kan/sm1} は, Generic DMS ring にあたる クラスをもたない. |
{\tt kan/sm1} , Generic DMS ring 鴻. |
つまり, Default で存在する, $n$ 変数の分散表現多項式環は存在しないわけである. |
ゃ障, Default у, $n$ 紊違h;憜綣違絖с. |
したがって, {\tt kan/sm1} では, DMS of N variables が来た場合, |
c, {\tt kan/sm1} с, DMS of N variables ャ翫, |
これを CurrentRing の元として読み込む. CurrentRing の変数の数が $n'$ |
CurrentRing 茯粋昭. CurrentRing 紊違違 $n'$ |
で, $n' < n$ だと新しい多項式環を生成してデータを読み込む. |
, $n' < n$ 違紊綣違若帥茯粋昭. |
Order その他の optional 情報はすべて無視する. |
Order 篁 optional 宴鴻∴. |
|
|
DMS の 2 番目のフィールドで, |
DMS 2 c若, |
Ring by Name を用いた場合, 現在の名前空間で変数 yyy に格納された ring object |
Ring by Name 翫, 憜腥咲у yyy 主 ring object |
の元として, この多項式を変換しなさいという意味になる. |
, 紊綣紊潟. |
{\tt kan/sm1} の場合, 環の定義は ring object として格納されており, |
{\tt kan/sm1} 翫, 違絎臂 ring object 主, |
この ring object を 変数 yyy で参照することにより CMO としてうけとった |
ring object 紊 yyy ус CMO c |
多項式をこの ring の元として格納できる. |
紊綣 ring 主с. |
*/ |
*/ |
|
|
/*&eg |
/*&eg |
Line 537 as the destination ring for the translation. |
|
Line 537 as the destination ring for the translation. |
|
*/ |
*/ |
|
|
\medbreak \noindent |
\medbreak \noindent |
//&jp {\bf Example}: (すべての数の表記は 16 進表記) |
//&jp {\bf Example}: (鴻違茵荐 16 画;荐) |
//&eg {\bf Example}: (all numbers are represented in hexadecimal notation) |
//&eg {\bf Example}: (all numbers are represented in hexadecimal notation) |
{\footnotesize \begin{verbatim} |
{\footnotesize \begin{verbatim} |
Z/11Z [6 variables] |
Z/11Z [6 variables] |
|
|
(CMO_MONOMIAL32[13],3*x^2*y),), |
(CMO_MONOMIAL32[13],3*x^2*y),), |
\end{verbatim} } |
\end{verbatim} } |
/*&jp |
/*&jp |
$ 3 x^2 y$ は 6 変数の多項式環の 元としてみなされている. |
$ 3 x^2 y$ 6 紊違紊綣違 帥. |
*/ |
*/ |
/*&eg |
/*&eg |
$3 x^2 y$ is regarded as an element of a six-variate polynomial ring. |
$3 x^2 y$ is regarded as an element of a six-variate polynomial ring. |
*/ |
*/ |
|
|
|
|
//&jp \subsection{再帰表現多項式の定義} |
//&jp \subsection{絽域;憜綣絎臂} |
//&eg \subsection{Recursive polynomials} |
//&eg \subsection{Recursive polynomials} |
|
|
\begin{verbatim} |
\begin{verbatim} |
Line 584 $\in$ CMObject/RecursivePolynomial \\ |
|
Line 584 $\in$ CMObject/RecursivePolynomial \\ |
|
\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{ --- 綺蕭鴻. 綏障蕭.} \\ |
& & \mbox{ --- e は 1変数多項式の巾をあらわす. } \\ |
& & \mbox{ --- e 1紊医綣綏障. } \\ |
\mbox{Coefficient} &:& \mbox{ ZZ} \,|\, \mbox{ QQ } \,|\, |
\mbox{Coefficient} &:& \mbox{ ZZ} \,|\, \mbox{ QQ } \,|\, |
\mbox{ integer32 } \,|\, |
\mbox{ integer32 } \,|\, |
\mbox{ Polynomial in 1 variable } \\ |
\mbox{ Polynomial in 1 variable } \\ |
& & \quad \,|\, \mbox{Tree} \,|\, \mbox{Zero} \,|\,\mbox{Dpolynomial}\\ |
& & \quad \,|\, \mbox{Tree} \,|\, \mbox{Zero} \,|\,\mbox{Dpolynomial}\\ |
\mbox{Name of the main variable } &:& |
\mbox{Name of the main variable } &:& |
\mbox{ {\sl int32} v } \\ |
\mbox{ {\sl int32} v } \\ |
& & \mbox{ --- v は 変数番号 (0 からはじまる) を表す. } \\ |
& & \mbox{ --- v 紊亥 (0 障) 茵. } \\ |
\mbox{Recursive Polynomial} &:& |
\mbox{Recursive Polynomial} &:& |
\mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\ |
\mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\ |
& & \quad \mbox{ RringDefinition, } \\ |
& & \quad \mbox{ RringDefinition, } \\ |
Line 602 $\in$ CMObject/RecursivePolynomial \\ |
|
Line 602 $\in$ CMObject/RecursivePolynomial \\ |
|
\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} ) \\ |
\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} ) \\ |
\mbox{RringDefinition} |
\mbox{RringDefinition} |
& : & \mbox{ {\sl List} v } \\ |
& : & \mbox{ {\sl List} v } \\ |
& & \quad \mbox{ --- v は, 変数名(indeterminate) または Tree のリスト. } \\ |
& & \quad \mbox{ --- v , 紊医(indeterminate) 障 Tree 鴻. } \\ |
& & \quad \mbox{ --- 順序の高い順. } \\ |
& & \quad \mbox{ --- 綺蕭. } \\ |
\end{eqnarray*} |
\end{eqnarray*} |
*/ |
*/ |
/*&eg |
/*&eg |
|
|
10, 1, |
10, 1, |
5, 31))) |
5, 31))) |
\end{verbatim} |
\end{verbatim} |
//&jp これは, |
//&jp , |
//&eg This represents |
//&eg This represents |
$$ x^3 (1234 y^5 + 17 ) + x^1 (y^{10} + 31 y^5) $$ |
$$ x^3 (1234 y^5 + 17 ) + x^1 (y^{10} + 31 y^5) $$ |
/*&jp |
/*&jp |
をあらわす. |
. |
%%非可換多項式もこの形式であらわしたいので, 積の順序を上のように |
%%紊綣綵√с, 腥綺筝 |
%%すること. つまり, 主変数かける係数の順番. |
%%. ゃ障, 筝糸違篆違. |
*/ |
*/ |
/*&eg |
/*&eg |
%%We intend to represent non-commutative polynomials with the |
%%We intend to represent non-commutative polynomials with the |
|
|
Class.recursivePolynomial h * ((-1)) + (x^2 * (1)) |
Class.recursivePolynomial h * ((-1)) + (x^2 * (1)) |
\end{verbatim} |
\end{verbatim} |
|
|
//&jp \subsection{CPU依存の double } |
//&jp \subsection{CPU箴絖 double } |
//&eg \subsection{CPU dependent double} |
//&eg \subsection{CPU dependent double} |
|
|
\begin{verbatim} |
\begin{verbatim} |
Line 693 $\in$ CMObject/MachineDouble \\ |
|
Line 693 $\in$ CMObject/MachineDouble \\ |
|
\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 byte order negotiation を用いる.} \\ |
&& \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 byte order negotiation を用いる.} \\ |
& & \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 byte order negotiation を用いる.} \\ |
&& \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 byte order negotiation を用いる.} |
& & \mbox{ \quad\quad byte order negotiation .} |
\end{eqnarray*} |
\end{eqnarray*} |
*/ |
*/ |
/*&eg |
/*&eg |
Line 721 $\in$ CMObject/MachineDouble \\ |
|
Line 721 $\in$ CMObject/MachineDouble \\ |
|
\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{ --- Encoding depends on CPU.}\\ |
& & \mbox{ --- Encoding depends on CPU.}\\ |
&& \mbox{\quad\quad Need the byte order negotiation.} \\ |
&& \mbox{\quad\quad Need the byte order negotiation.} \\ |
\mbox{Array of 64bit machine double} &:& |
\mbox{Array of 64bit machine double} &:& |
Line 733 $\in$ CMObject/MachineDouble \\ |
|
Line 733 $\in$ CMObject/MachineDouble \\ |
|
\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{ --- Encoding depends on CPU.}\\ |
& & \mbox{ --- Encoding depends on CPU.}\\ |
& & \mbox{\quad\quad Need the byte order negotiation.} \\ |
& & \mbox{\quad\quad Need the byte order negotiation.} \\ |
\mbox{Array of 128bit machine double} &:& |
\mbox{Array of 128bit machine double} &:& |
Line 752 $\in$ CMObject/MachineDouble \\ |
|
Line 752 $\in$ CMObject/MachineDouble \\ |
|
\end{verbatim} |
\end{verbatim} |
|
|
/*&jp |
/*&jp |
IEEE 準拠の float については, IEEE 754 double precision floating-point |
IEEE 羣 float ゃ, IEEE 754 double precision floating-point |
format (64 bit) の定義を見よ. |
format (64 bit) 絎臂荀. |
|
|
256.100006 の Intel Pentium の double64 での内部表現は |
256.100006 Intel Pentium double64 с茵憗 |
{\tt cd 0c 80 43 } \\ |
{\tt cd 0c 80 43 } \\ |
256.100006 の PowerPC (Mac) の double64 での内部表現は |
256.100006 PowerPC (Mac) double64 с茵憗 |
{\tt 43 80 0c cd }. |
{\tt 43 80 0c cd }. |
この例でみるように byte の順序が逆である. |
箴с帥 byte 綺с. |
エンジンスタートの時の byte order negotiation で byte の順序を指定する. |
潟吾潟鴻帥若 byte order negotiation byte 綺絎. |
|
|
|
|
*/ |
*/ |
Line 781 when the engine starts. |
|
Line 781 when the engine starts. |
|
|
|
\subsection{Bigfloat32} |
\subsection{Bigfloat32} |
/*&jp |
/*&jp |
int32 を基本とした bigfloat の表現方法について述べる. |
int32 堺 bigfloat 茵憝号ゃ菴違鴻. |
この形式は mpfr を 32bit CPU で使用した時の内部表現と共通である. |
綵√ mpfr 32bit CPU т戎茵憗演с. |
*/ |
*/ |
/*&eg |
/*&eg |
This subsection describes our format for bigfloat in terms of the int32. |
This subsection describes our format for bigfloat in terms of the int32. |
Line 796 Ref: {\tt OpenXM/src/mpfr/bfsize/bfsize.c} |
|
Line 796 Ref: {\tt OpenXM/src/mpfr/bfsize/bfsize.c} |
|
|
|
|
|
/*&jp |
/*&jp |
Bigfloat32 は次の形式の int32 の配列である. |
Bigfloat32 罨<綵√ int32 с. |
*/ |
*/ |
/*&eg |
/*&eg |
The bigfloat32 is an array of int32 numbers of the following format. |
The bigfloat32 is an array of int32 numbers of the following format. |
Line 808 The bigfloat32 is an array of int32 numbers of the fol |
|
Line 808 The bigfloat32 is an array of int32 numbers of the fol |
|
\end{center} |
\end{center} |
|
|
/*&jp |
/*&jp |
p=prec は精度, s=sign は符号(1 が正の数, -1 (2の補数表現)が負の数) , |
p=prec 膕上墾, s=sign 膃(1 罩c, -1 (2茖域;)莢) , |
E=exp は指数部で, 上のデータは数 |
E=exp 育, 筝若帥 |
$$ s (a[k]/B + a[k-1]/B^2 + ... + a[1]/B^k) 2^E $$ |
$$ s (a[k]/B + a[k-1]/B^2 + ... + a[1]/B^k) 2^E $$ |
を表す. |
茵. |
ここで $B=2^{32}$, |
$B=2^{32}$, |
$k = \lceil p/32 \rceil$ |
$k = \lceil p/32 \rceil$ |
である. |
с. |
*/ |
*/ |
/*&eg |
/*&eg |
p=prec is the precision, s=sign is the sign(1 means positive, -1 (expressed by two's complement) is nevative), |
p=prec is the precision, s=sign is the sign(1 means positive, -1 (expressed by two's complement) is nevative), |