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

Annotation of OpenXM/doc/OpenXM-specs/cmo-basic1.tex, Revision 1.2

1.2     ! noro        1: %% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.1.1.1 2000/01/20 08:52:46 noro Exp $
1.1       noro        2: //&jp \section{ 数, 多項式 の  CMO 表現 }
                      3: //&eg \section{ CMOexpressions for numbers and polynomials }
                      4:
                      5: /*&C
                      6: @../SSkan/plugin/cmotag.h
                      7: \begin{verbatim}
                      8: #define     CMO_MONOMIAL32  19
                      9: #define     CMO_ZZ          20
                     10: #define     CMO_QQ          21
                     11: #define     CMO_ZERO        22
                     12: #define     CMO_DMS_GENERIC  24
                     13: #define     CMO_DMS_OF_N_VARIABLES  25
                     14: #define     CMO_RING_BY_NAME   26
                     15: #define     CMO_DISTRIBUTED_POLYNOMIAL 31
                     16: #define     CMO_RATIONAL       34
                     17:
                     18:
                     19: #define     CMO_INDETERMINATE  60
                     20: #define     CMO_TREE           61
                     21: #define     CMO_LAMBDA         62    /* for function definition */
                     22: \end{verbatim}
                     23:
                     24: */
                     25:
                     26: /*&jp
                     27: 以下, グループ CMObject/Basic1, CMObject/Tree
                     28: および CMObject/DistributedPolynomial
                     29: に属する CMObject の形式を説明する.
                     30: \noroa{ tagged list を導入すべきか?  cf. SSkan/plugin/cmo.txt }
                     31:
                     32: */
                     33: /*&eg
                     34: In the sequel, we will explain on the groups
                     35: CMObject/Basic1, CMObject/Tree
                     36: and CMObject/DistributedPolynomial.
                     37: */
                     38:
                     39: /*&jp
                     40:
                     41: \bigbreak
                     42: \noindent
                     43: Group CMObject/Basic1 requires CMObject/Basic0. \\
                     44: ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/Basic1. \\
                     45: \begin{eqnarray*}
                     46: \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\
                     47: & & \mbox{ --- ユニバーサルな ゼロを表す. } \\
                     48: \mbox{ZZ}         &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots
                     49: {\sl byte}\, \mbox{a[m]} ) \\
                     50: &:& \mbox{ --- bignum をあらわす. a[i] についてはあとで説明}\\
                     51: \mbox{QQ}        &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\
                     52: & & \mbox{ --- 有理数 $a/b$ を表す. } \\
                     53: \mbox{Rational}        &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\
                     54: & & \mbox{ ---  $a/b$ を表す. } \\
                     55: \mbox{Indeterminate}        &:& ({\tt CMO\_INDETERMINATE}, {\sl Cstring}\, {\rm v}) \\
                     56: & & \mbox{ --- 変数名 $v$ . } \\
                     57: \end{eqnarray*}
                     58: */
                     59: /*&eg
                     60:
                     61: \bigbreak
                     62: \noindent
                     63: Group CMObject/Basic1 requires CMObject/Basic0. \\
                     64: ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/Basic1. \\
                     65: \begin{eqnarray*}
                     66: \mbox{Zero} &:& ({\tt CMO\_ZERO}) \\
                     67: & & \mbox{ --- Universal zero } \\
                     68: \mbox{ZZ}         &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots
                     69: {\sl byte}\, \mbox{a[m]} ) \\
                     70: &:& \mbox{ --- bignum. The meaning of a[i] will be explained later.}\\
                     71: \mbox{QQ}        &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\
                     72: & & \mbox{ --- Rational number $a/b$. } \\
                     73: \mbox{Rational}        &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\
                     74: & & \mbox{ ---  Rational expression $a/b$. } \\
                     75: \mbox{Indeterminate}        &:& ({\tt CMO\_INDETERMINATE}, {\sl Cstring}\, {\rm v}) \\
                     76: & & \mbox{ --- Variable name $v$ . } \\
                     77: \end{eqnarray*}
                     78: */
                     79: /*&C
                     80:
                     81: */
                     82:
                     83: /*&jp
                     84: Indeterminate は変数名をあらわす.
                     85: v はバイト列であればなにを用いてもよいが,
                     86: システム毎に変数名として用いられるバイト列は制限がある.
                     87: 各システム xxx は任意の文字列を各システム固有の変数名へ1対1に変換できるように
                     88: 実装しないといけない.
                     89: (これを
                     90: {\tt Dx} は {\tt \#dx} と変換するなどの
                     91: escape sequence を用いて実現するのは, 無理があるようである.
                     92: テーブルを作成する必要があるであろう.)
                     93: */
                     94: /*&eg
                     95: Indeterminate is a name of a variable.
                     96: v may be any sequence of bytes, but each system has its own
                     97: restrictions on the names of variables.
                     98: Indeterminates of CMO and internal variable names must be translated
                     99: in one to one correspondence.
                    100: */
                    101:
                    102: /*&jp
                    103:
                    104: \noindent
                    105: Group CMObject/Tree requires CMObject/Basic1. \\
                    106: Tree, Lambda $\in$ CMObject/Basic1. \\
                    107: \begin{eqnarray*}
                    108: \mbox{Tree}        &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name},
                    109:  {\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\
                    110: & & \mbox{ --- 名前 name の定数または関数. 関数の評価はおこなわない. } \\
                    111: & & \mbox{ --- cdname は空文字列でなければ name の意味が説明されている }\\
                    112: & & \mbox{ --- OpenMath CD (content dictionary) の名前. } \\
                    113: \mbox{Lambda}        &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args},
                    114:                           {\sl Tree} {\rm body}) \\
                    115: & & \mbox{ --- body を args を引数とする関数とする. } \\
                    116: & & \mbox{ --- optional な引数が必要なときは, leaves の後へつづける.} \\
                    117: \end{eqnarray*}
                    118: */
                    119: /*&eg
                    120:
                    121: \noindent
                    122: Group CMObject/Tree requires CMObject/Basic1. \\
                    123: Tree, Lambda $\in$ CMObject/Basic1. \\
                    124: \begin{eqnarray*}
                    125: \mbox{Tree}        &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name},
                    126:  {\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\
                    127: & & \mbox{ --- A function or a constant of name. Functions are not evaluated. } \\
                    128: & & \mbox{ --- cdname may be a null. If it is not null, it is the name of}\\
                    129: & & \mbox{ --- the OpenMath CD (content dictionary). } \\
                    130: \mbox{Lambda}        &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args},
                    131:                           {\sl Tree} {\rm body}) \\
                    132: & & \mbox{ --- a function with the arguments body. } \\
                    133: & & \mbox{ --- optional arguments come after leaves.} \\
                    134: \end{eqnarray*}
                    135: */
                    136:
                    137: /*&C
                    138:
                    139: */
                    140:
                    141: /*&jp
                    142: 数式を処理するシステムでは, Tree 構造が一般にもちいられる.
                    143: たとえば, $\sin(x+e)$ は,
                    144: {\tt (sin, (plus, x, e))}
                    145: なる Tree であらわすのが一般的である.
                    146: Tree の表現を スタックマシンのレベルでおこなうとすると,
                    147: {\tt ox\_BEGIN\_BLOCK}, {\tt ox\_END\_BLOCK} で評価を抑制するのが
                    148: 一つの方法である (cf. Postscript の {\tt \{ }, {\tt \} }).
                    149: たとえば上の方法では
                    150: {\tt x, e, plus, sin } を begin block, end block でかこめばよろしい.
                    151: われわれはスタックマシンの実装をなるべく簡単にするという立場をとりたい,
                    152: また数学オブジェクトを OX スタックマシンと CMObject を混在して表現したく
                    153: ない.
                    154: したがって,
                    155: Tree 構造は Open Math 風の表現をもちいた CMO を導入することにした.
                    156: またこのほうが, われわれの想定するシステム xxx において, Open XM 対応が
                    157: はるかに容易である.
                    158: なお, Tree は, Open Math では, Symbol, Application のメカニズムに相当する.
                    159: */
                    160: /*&eg
                    161: In many computer algebra systems, mathematical expressions are usually
                    162: expressed in terms of a tree structure.
                    163: For example,
                    164: $\sin(x+e)$ is expressed as
                    165: {\tt (sin, (plus, x, e))}
                    166: as a tree.
                    167: We can   @@@
                    168: */
                    169:
                    170:
                    171: /*&C
                    172:
                    173: */
                    174: /*&jp
                    175: Lambda は関数を定義するための関数である.
                    176: Lisp の Lambda 表現と同じ.
                    177:
                    178: \noindent
                    179: 例: $sin(x+e)$ の表現.
                    180: \begin{verbatim}
                    181: (CMO_TREE, (CMO_STRING, "sin"), (CMO_STRING, "basic"),
                    182:     (CMO_LIST,[size=]1,
                    183:         (CMO_TREE, (CMO_STRING, "plus"), (CMO_STRING, "basic"),
                    184:             (CMO_LIST,[size=]2, (CMO_INDETERMINATE,"x"),
                    185:                                 (CMO_TREE,(CMO_STRING, "e"),  自然対数の底
                    186:                                           (CMO_STRING, "basic"))
                    187:         ))
                    188:     )
                    189: )
                    190: \end{verbatim}
                    191:
                    192: \noindent
                    193: Example:
                    194: \begin{verbatim}
                    195: sm1> [(plus) (Basic) [(123).. (345)..]] [(class) (tree)] dc ::
                    196: Class.tree [    $plus$ , $Basic$ , [    123 , 345 ]  ]
                    197: \end{verbatim}
                    198:
                    199:
                    200:
                    201: \bigbreak
                    202: 次に, 分散表現多項式に関係するグループを定義しよう.
                    203:
                    204: \medbreak
                    205: \noindent
                    206: Group CMObject/DistributedPolynomials requires CMObject/Basic0,
                    207: CMObject/Basic1. \\
                    208: Monomial, Monomial32, Coefficient, Dpolynomial, DringDefinition,
                    209: Generic DMS ring, RingByName, DMS of N variables $\in$
                    210: CMObject/DistributedPolynomials. \\
                    211: \begin{eqnarray*}
                    212: \mbox{Monomial} &:& \mbox{Monomial32}\, |\, \mbox{Zero} \\
                    213: \mbox{Monomial32}&:& ({\tt CMO\_MONOMIAL32}, {\sl int32}\, n,
                    214: {\sl int32}\, \mbox{e[1]}, \ldots,
                    215: {\sl int32}\, \mbox{e[n]}, \\
                    216: & & \ \mbox{Coefficient}) \\
                    217: & & \mbox{ --- e[i] で, $n$ 変数 monomial
                    218: $x^e = x_1^{e_1} \cdots x_n^{e_n}$ の各指数 $e_i$
                    219: をあらわす.} \\
                    220: \mbox{Coefficient}&:& \mbox{ZZ} | \mbox{Integer32} \\
                    221: \mbox{Dpolynomial}&:& \mbox{Zero} \\
                    222: & & |\ ({\tt CMO\_DISTRIBUTED\_POLYNOMIAL},{\sl int32} m, \\
                    223: & & \ \ \mbox{DringDefinition},
                    224: [\mbox{Monomial32}|\mbox{Zero}], \\
                    225: & &\ \
                    226: \{\mbox{Monomial32}\}) \\
                    227: & &\mbox{--- m はモノミアルの個数である.}\\
                    228: \mbox{DringDefinition}
                    229: &:& \mbox{DMS of N variables} \\
                    230: & & |\ \mbox{RingByName} \\
                    231: & & |\ \mbox{Generic DMS ring} \\
                    232: & & \mbox{ --- 分散表現多項式環の定義. } \\
                    233: \mbox{Generic DMS ring}
1.2     ! noro      234: &:& \mbox{({\tt CMO\_DMS\_GENERIC}) --- 新版はこちら}\\
1.1       noro      235: \mbox{RingByName}&:& ({\tt CMO\_RING\_BY\_NAME}, {\sl Cstring}\  {\rm s}) \\
                    236: & & \mbox{ --- 名前 s で, 格納された ring 定義.} \\
                    237: \mbox{DMS of N variables}
                    238: &:& ({\tt CMO\_DMS\_OF\_N\_VARIABLES}, \\
                    239: & & \ ({\tt CMO\_LIST}, {\sl int32}\, \mbox{m},
                    240: {\sl Integer32}\,  \mbox{n}, {\sl Integer32}\,\mbox{p} \\
                    241: & & \ \ [,{\sl object}\,\mbox{s}, {\sl Cstring}\,\mbox{c},
                    242:           {\sl List}\, \mbox{vlist},
                    243: {\sl List}\, \mbox{wvec}, {\sl List}\, \mbox{outord}]) \\
                    244: & & \mbox{ --- m はあとに続く要素の数} \\
                    245: & & \mbox{ --- n は変数の数, p は 標数} \\
                    246: & & \mbox{ --- s は ring の名前} \\
                    247: & & \mbox{ --- c は係数環, QQ, ZZ の場合は文字列で QQ, ZZ と書く.} \\
                    248: & & \mbox{ --- vlist は Indeterminate のリスト(新版). 多項式環の変数リスト} \\
                    249: & & \mbox{ --- wvec は order をきめる weight vector,} \\
                    250: & & \mbox{ --- outord は出力するときの変数順序.} \\
                    251: \end{eqnarray*}
                    252:
                    253: RingByName や DMS of N variables はなくても, DMS を定義できる.
                    254: したがって, これらを実装してないシステムで DMS を扱うものが
                    255: あってもかまわない.
                    256:
                    257: 以下, 以上の CMObject  にたいする,
                    258: xxx = asir, kan の振舞いを記述する.
                    259:
                    260: \subsection{ Zero}
                    261: CMO では ゼロの表現法がなんとうりもあるが,
                    262: どのようなゼロをうけとっても,
                    263: システムのゼロに変換できるべきである.
                    264: (たとえば, asir は 0 はただ一つ.)
                    265:
                    266:
                    267:
                    268: \subsection{ 整数 ZZ }
                    269:
                    270: \begin{verbatim}
                    271: #define     CMO_ZZ          20
                    272: \end{verbatim}
                    273:
                    274:
                    275: この節ではOpen xxx 規約における任意の大きさの整数(bignum)の扱いについて
                    276: 説明する.
                    277: Open XM 規約における多重精度整数を表すデータ型 CMO\_ZZ は GNU MPライブ
                    278: ラリなどを参考にして設計されていて, 符号付き絶対値表現を用いている.
                    279: (cf. {\tt kan/sm1} の配布ディレクトリのなかの {\tt plugin/cmo-gmp.c})
                    280: CMO\_ZZ は次の形式をとる.\\
                    281: \begin{tabular}{|c|c|c|c|c|}
                    282: \hline
                    283: {\tt int32 CMO\_ZZ} & {\tt int32 $f$} & {\tt int32 $b_0$} & $\cdots$ &
                    284: {\tt int32 $b_{n}$} \\
                    285: \hline
                    286: \end{tabular} \\
                    287: $f$ は32bit整数である.
                    288: $b_0, \ldots, b_n$ は unsigned int32 である.
                    289: $|f|$ は $n+1$ である.
                    290: この CMO の符号は $f$ の符号で定める.
                    291: 前述したように, 32bit整数の負数は 2 の補数表現で表される.
                    292:
                    293: Open xxx 規約では上の CMO は以下の整数を意味する.
                    294: \[
                    295: \mbox{sgn}(f)\times (b_0 R^{0}+ b_1 R^{1} + \cdots + b_{n-1}R^{n-1} + b_n R^n).
                    296: \]
                    297: ここで $R = 2^{32}$ である.
                    298: {\tt int32} を network byte order で表現しているとすると,
                    299: 例えば, 整数 $14$ は CMO\_ZZ で表わすと,
                    300: \[
                    301: \mbox{(CMO\_ZZ, 1, 0, 0, 0, e)},
                    302: \]
                    303: と表わす.
                    304: これはバイト列では
                    305: \[
                    306: \mbox{\tt 00 00 00 14 00 00 00 01 00 00 00 0e}
                    307: \]
                    308: となる.
                    309:
                    310:
                    311: なお ZZ の 0  ( (ZZ) 0 と書く ) は,
                    312: {\tt (CMO\_ZZ, 00,00,00,00)}
                    313: と表現する.
                    314:
                    315:
                    316: \subsection{ 分散表現多項式 Dpolynomial }
                    317:
                    318: 環とそれに属する多項式は次のような考えかたであつかう.
                    319:
                    320: Generic DMS ring に属する元は,
                    321: 変数を $n$ 個持つ 適当な係数集合 $K$ を持つ多項式環 $K[x_1, \ldots, x_n]$
                    322: の元である.
                    323: 係数集合 $K$ がなにかは, 実際データを読み込み, Coefficient を見た段階で
                    324: わかる.
                    325: この環に属する多項式を CMO 形式でうけとった場合, 各サーバはその
                    326: サーバの対応する Object  に変換しないといけない.
                    327: この変換の仕方は, 各サーバ毎にきめる.
                    328:
                    329: Asir の場合は, $K[x_1, \ldots, x_n]$ の元は分散表現多項式に変換される.
                    330: \noroa{ でも, order はどうなるの? }
                    331:
                    332: {\tt kan/sm1} の場合は事情は複雑である.
                    333: {\tt kan/sm1} は, Generic DMS ring にあたる クラスをもたない.
                    334: つまり, Default で存在する, $n$ 変数の分散表現多項式環は存在しないわけである.
                    335: したがって, {\tt kan/sm1} では, DMS of N variables が来た場合,
                    336: これを CurrentRing の元として読み込む.  CurrentRing の変数の数が $n'$
                    337: で, $n' < n$ だと新しい多項式環を生成してデータを読み込む.
                    338: Order その他の optional 情報はすべて無視する.
                    339:
                    340: DMS の 2 番目のフィールドで,
                    341: Ring by Name を用いた場合, 現在の名前空間で変数 yyy に格納された ring object
                    342: の元として, この多項式を変換しなさいという意味になる.
                    343: {\tt kan/sm1} の場合, 環の定義は ring object として格納されており,
                    344: この ring object を 変数 yyy で参照することにより CMO としてうけとった
                    345: 多項式をこの ring の元として格納できる.
                    346:
                    347:
                    348:
                    349:
                    350:
                    351: \medbreak \noindent
                    352: {\bf Example}:
                    353: (すべての数の表記は 16 進表記)
                    354: {\footnotesize \begin{verbatim}
                    355: Z/11Z [6 variables]
                    356: (kxx/cmotest.sm1) run
                    357: [(x,y) ring_of_polynomials ( ) elimination_order 11 ] define_ring ;
                    358: (3x^2 y). cmo /ff set ;
                    359: [(cmoLispLike) 1] extension ;
                    360: ff ::
                    361: Class.CMO CMO StandardEncoding: size = 52, size/sizeof(int) = 13,
                    362: tag=CMO_DISTRIBUTED_POLYNOMIAL
                    363:
                    364:   0  0  0 1f  0  0  0  1  0  0  0 18  0  0  0 13  0  0  0  6
                    365:   0  0  0  0  0  0  0  2  0  0  0  0  0  0  0  0  0  0  0  1
                    366:   0  0  0  0  0  0  0  2  0  0  0  3
                    367:
                    368: ff omc ::
                    369:  (CMO_DISTRIBUTED_POLYNOMIAL[1f],[size=]1,(CMO_DMS_GENERIC[18],),
                    370:   (CMO_MONOMIAL32[13],3*x^2*y),),
                    371: \end{verbatim} }
                    372: length は, monomial の数$+2$ である.
                    373: $ 3 x^2 y$ は 6 変数の多項式環の元としてみなされている.
                    374: %%Prog: (3x^2 y). cmosave   ===> debug/cmodata1.cmo
                    375: %%\\ 反省: 分散多項式の定義で,
                    376: %%{\tt CMO\_LIST} でなく, {\tt CMO\_DMS} がはじめにくるべきだったのでは?
                    377: %%あたらしい 分散多項式の定義は次のようにすべき:
                    378: %% 修正済み. 1999, 9/13
                    379:
                    380:
                    381:
                    382: \subsection{再帰表現多項式の定義}
                    383:
                    384: \begin{verbatim}
                    385: #define CMO_RECURSIVE_POLYNOMIAL        27
                    386: #define CMO_POLYNOMIAL_IN_ONE_VARIABLE  33
                    387: \end{verbatim}
                    388:
                    389: Group CMObject/RecursivePolynomial requires CMObject/Basic0, CMObject/Basic1.\\
                    390: Polynomial in 1 variable, Coefficient, Name of the main variable,
                    391: Recursive Polynomial, Ring definition for recursive polynomials
                    392: $\in$ CMObject/RecursivePolynomial \\
                    393:
                    394: \begin{eqnarray*}
                    395: \mbox{Polynomial in 1 variable} &:&
                    396: \mbox{({\tt CMO\_POLYNOMIAL\_IN\_ONE\_VARIABLE},\, {\sl int32}\, m, } \\
                    397: & & \quad \mbox{ Name of the main variable }, \\
                    398: & & \quad \mbox{ \{ {\sl int32} e, Coefficient \}} \\
                    399: & & \mbox{ --- m はモノミアルの個数. } \\
                    400: & & \mbox{ --- e, Coefficieint はモノミアルを表現している. } \\
                    401: & & \mbox{ --- 順序の高い順にならべる. 普通は巾の高い順.} \\
                    402: & & \mbox{ ---  e は 1変数多項式の巾をあらわす. } \\
                    403: \mbox{Coefficient} &:& \mbox{ ZZ} \,|\, \mbox{ QQ } \,|\,
                    404: \mbox{ integer32  } \,|\,
                    405: \mbox{ Polynomial in 1 variable } \\
                    406: & & \quad \,|\, \mbox{Tree} \,|\, \mbox{Zero} \,|\,\mbox{Dpolynomial}\\
                    407: \mbox{Name of the main variable } &:&
                    408: \mbox{ {\sl int32} v }   \\
                    409: & & \mbox{ --- v は 変数番号 (0 からはじまる) を表す. } \\
                    410: \mbox{Recursive Polynomial} &:&
                    411: \mbox{ ( {\tt CMO\_RECURSIVE\_POLYNOMIAL}, } \\
                    412: & & \quad \mbox{ Ring definition for
                    413: recursive polynomials, } \\
                    414: & & \quad
                    415: \mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient}   \\
                    416: \mbox{Ring definition for recursive polynomials }
                    417: & : &  \mbox{ {\sl List} v } \\
                    418: & & \quad \mbox{ --- v は, 変数名(indeterminate) のリスト. } \\
                    419: & & \quad \mbox{ --- 順序の高い順. } \\
                    420: \end{eqnarray*}
                    421:
                    422: \bigbreak
                    423: \noindent
                    424: 実例:
                    425: \begin{verbatim}
                    426: (CMO_RECURSIEVE_POLYNOMIAL, ("x","y"),
                    427: (CMO_POLYNOMIAL_IN_ONE_VARIABLE, 2,      0,  <--- "x"
                    428:   3, (CMO_POLYNOMIAL_IN_ONE_VARIABLE, 2, 1,  <--- "y"
                    429:        5, 1234,
                    430:        0, 17),
                    431:   1, (CMO_POLYNOMIAL_IN_ONE_VARIABLE, 2, 1,  <--- "y"
                    432:        10, 1,
                    433:        5, 31)))
                    434: \end{verbatim}
                    435: これは,
                    436: $$   x^3 (1234 y^5 + 17 ) +  x^1 (y^10 + 31 y^5)  $$
                    437: をあらわす.
                    438: 非可換多項式もこの形式であらわしたいので, 積の順序を上のように
                    439: すること. つまり, 主変数かける係数の順番.
                    440:
                    441: \noindent
                    442: \begin{verbatim}
                    443: sm1
                    444: sm1>(x^2-h). [(class) (recursivePolynomial)] dc /ff set ;
                    445: sm1>ff ::
                    446: Class.recursivePolynomial h * ((-1)) + (x^2  * (1))
                    447: \end{verbatim}
                    448:
                    449:
                    450:
                    451: int32 と Integer32 の違い.
                    452: 次にくるデータがかならず int32 とわかっておれば,
                    453: int32 を用いる.
                    454: 次のデータ型がわからないとき Integer32 を用いる.
                    455:
                    456:
                    457: \subsection{CPU依存の double }
                    458:
                    459: \begin{verbatim}
                    460: #define CMO_64BIT_MACHINE_DOUBLE   40
                    461: #define CMO_ARRAY_OF_64BIT_MACHINE_DOUBLE  41
                    462: #define CMO_128BIT_MACHINE_DOUBLE   42
                    463: #define CMO_ARRAY_OF_128BIT_MACHINE_DOUBLE  43
                    464: \end{verbatim}
                    465:
                    466: \noindent
                    467: Group CMObject/MachineDouble requires CMObject/Basic0.\\
                    468: 64bit machine double, Array of 64bit machine double
                    469: 128bit machine double, Array of 128bit machine double
                    470: $\in$ CMObject/MachineDouble \\
                    471:
                    472: \begin{eqnarray*}
                    473: \mbox{64bit machine double} &:&
                    474: \mbox{({\tt CMO\_64BIT\_MACHINE\_DOUBLE}, } \\
                    475: & & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte}} s8)\\
                    476: & & \mbox{ --- s1, $\ldots$, s8 は {\tt double} (64bit). } \\
                    477: & & \mbox{ --- この表現はCPU依存である.}\\
                    478: &&  \mbox{\quad\quad mathcap に CPU 情報を付加しておく.} \\
                    479: \mbox{Array of 64bit machine double} &:&
                    480: \mbox{({\tt CMO\_ARRAY\_OF\_64BIT\_MACHINE\_DOUBLE}, {\sl int32} m, } \\
                    481: & & \quad \mbox{ {\sl byte} s1[1] , \ldots , {\sl byte}}\, s8[1], \ldots , {\sl byte}\, s8[m])\\
                    482: & & \mbox{ --- s*[1], $\ldots$ s*[m] は m 個の double (64bit) である. } \\
                    483: & & \mbox{ --- この表現はCPU依存である.}\\
                    484: & & \mbox{ \quad\quad mathcap に CPU 情報を付加しておく.} \\
                    485: \mbox{128bit machine double} &:&
                    486: \mbox{({\tt CMO\_128BIT\_MACHINE\_DOUBLE}, } \\
                    487: & & \quad \mbox{ {\sl byte} s1 , \ldots , {\sl byte}} s16)\\
                    488: & & \mbox{ --- s1, $\ldots$, s16 は {\tt long double} (128bit). } \\
                    489: & & \mbox{ --- この表現はCPU依存である.}\\
                    490: &&  \mbox{\quad\quad mathcap に CPU 情報を付加しておく.} \\
                    491: \mbox{Array of 128bit machine double} &:&
                    492: \mbox{({\tt CMO\_ARRAY\_OF\_128BIT\_MACHINE\_DOUBLE}, {\sl int32} m, } \\
                    493: & & \quad \mbox{ {\sl byte} s1[1] , \ldots , {\sl byte}} s16[1], \ldots , {\sl byte} s16[m])\\
                    494: & & \mbox{ --- s*[1], $\ldots$ s*[m] は m 個の long double (128bit) である. } \\
                    495: & & \mbox{ --- この表現はCPU依存である.}\\
                    496: & & \mbox{ \quad\quad mathcap に CPU 情報を付加しておく.}
                    497: \end{eqnarray*}
                    498:
                    499: \bigbreak
                    500: 次に IEEE 準拠の float および Big float を定義しよう.
                    501: \begin{verbatim}
                    502: #define CMO_BIGFLOAT   50
                    503: #define CMO_IEEE_DOUBLE_FLOAT 51
                    504: \end{verbatim}
                    505:
                    506: IEEE 準拠の float については,
                    507: IEEE 754  double precision floating-point format
                    508: (64 bit) の定義を見よ.
                    509:
                    510: \noindent
                    511: Group CMObject/Bigfloat requires CMObject/Basic0, CMObject/Basic1.\\
                    512: Bigfloat
                    513: $\in$ CMObject/Bigfloat \\
                    514:
                    515: \begin{eqnarray*}
                    516: \mbox{Bigfloat} &:&
                    517: \mbox{({\tt CMO\_BIGFLOAT}, } \\
                    518: & & \quad \mbox{ {\sl ZZ} a , {\sl ZZ} e})\\
                    519: & & \mbox{ --- $a \times 2^e$ をあらわす. } \\
                    520: \end{eqnarray*}
                    521:
                    522:
                    523: */

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