@comment $OpenXM: OpenXM/src/asir-doc/int-parts/datatype/ratexp.texi,v 1.1 2001/04/23 05:45:37 noro Exp $ @section 有理式 @example struct oR @{ 有理式 short id; 識別子 (= O_R) short reduced; 既約分数のとき 1 P nm; 分子 P dn; 分母 @}; typedef struct oR *R; @end example @noindent 有理式は, 単に分母, 分子という二つの多項式の組合せである. 有理数と異な り, 必ずしも既約とは限らない. 既約にするためには, @code{reductr()} に より明示的に約分を行なう必要がある. 一度約分された有理式は, メンバ @code{reduced} が @code{1} になるため既約性が保証される. @code{Obj} は @code{risa} において独立して存在する(識別子を持つ) object に共通 するメンバである. @subsection 有理式の生成 @example #include "ca.h" PTOR(p,r) (macro; P p; R r) 多項式 p を, 分子 p, 分母 1 の有理式に変換する. @end example @subsection 四則 @noindent 以下の各函数は入力として数, 多項式, 有理式 (@code{id} が @code{O_R} 以下) の object がとれる. @example #include "ca.h" addr(VL vl,Obj a,Obj b,Obj *rp) *rp = a + b subr(VL vl,Obj a,Obj b,Obj *rp) *rp = a - b mulr(VL vl,Obj a,Obj b,Obj *rp) *rp = a * b divr(VL vl,Obj a,Obj b,Obj *rp) *rp = a * b pwrr(VL vl,Obj a,Q e,Obj *rp) *rp = a ^ e reductr(VL vl,Obj a,Obj *rp) *rp = a を約分したもの. @end example