=================================================================== RCS file: /home/cvs/OpenXM/src/asir-doc/parts/builtin/num.texi,v retrieving revision 1.11 retrieving revision 1.13 diff -u -p -r1.11 -r1.13 --- OpenXM/src/asir-doc/parts/builtin/num.texi 2016/03/22 07:25:14 1.11 +++ OpenXM/src/asir-doc/parts/builtin/num.texi 2019/03/29 01:57:46 1.13 @@ -1,4 +1,4 @@ -@comment $OpenXM: OpenXM/src/asir-doc/parts/builtin/num.texi,v 1.10 2003/12/20 20:02:28 ohara Exp $ +@comment $OpenXM: OpenXM/src/asir-doc/parts/builtin/num.texi,v 1.12 2016/08/29 04:56:58 noro Exp $ \BJP @node 数の演算,,, 組み込み函数 @section 数の演算 @@ -22,10 +22,12 @@ * conj real imag:: * eval deval:: * pari:: -* setprec:: +* setbprec setprec:: * setmod:: * lrandom:: * ntoint32 int32ton:: +* setround:: +* inttorat:: @end menu \JP @node idiv irem,,, 数の演算 @@ -756,7 +758,7 @@ These functions works also for polynomials with comple @code{eval} においては, @var{prec} を指定した場合, 計算は, 10 進 @var{prec} 桁程度で行われる. @var{prec} の指定がない場合, 現在設定されている精度で行われる. -(@xref{setprec}, @xref{setbprec}.) +(@xref{setbprec setprec}.) @item @table @t @item 扱える函数は, 次の通り. @@ -799,7 +801,7 @@ done by the C math library. When @var{prec} is specified, computation will be performed with a precision of about @var{prec}-digits. If @var{prec} is not specified, computation is performed with the -precision set currently. (@xref{setprec}.) +precision set currently. (@xref{setbprec setprec}.) @item Currently available numerical functions are listed below. @@ -846,7 +848,7 @@ Napier's number (@t{exp}(1)) @table @t \JP @item 参照 \EG @item References -@fref{ctrl}, @fref{setprec}, @fref{setbprec}. +@fref{ctrl}, @fref{setbprec setprec}. @end table \JP @node pari,,, 数の演算 @@ -1080,7 +1082,7 @@ For details of individual functions, refer to the @b{P @table @t \JP @item 参照 \EG @item References -@fref{setprec}. +@fref{setbprec setprec}. @end table \JP @node setbprec setprec,,, 数の演算 @@ -1342,4 +1344,67 @@ integer. These functions are used in such a case. \EG @item References \JP @fref{分散計算}, @fref{数の型}. \EG @fref{Distributed computation}, @fref{Types of numbers}. +@end table + +\JP @node inttorat,,, 数の演算 +\EG @node inttorat,,, Numbers +@subsection @code{inttorat} +@findex inttorat + +@table @t +@item inttorat(@var{a},@var{m},@var{b}) +\JP :: 整数-有理数変換を行う. +\EG :: Perform the rational reconstruction. +@end table + +@table @var +@item return +\JP リストまたは 0 +\EG list or 0 +@item a +@itemx m +@itemx b +\JP 整数 +\EG integer +@end table + +@itemize @bullet +\BJP +@item +整数 @var{a} に対し, @var{xa=y} mod @var{m} を満たす正整数 @var{x}, 整数 @var{y} +(@var{x}, @var{|y|} < @var{b}, @var{GCD(x,y)=1}) を求める. +@item +このような @var{x}, @var{y} が存在するなら @var{[y,x]} を返し, 存在しない場合には 0 を返す. +@item +@var{b} を @var{floor(sqrt(m/2))} と取れば, @var{x}, @var{y} は存在すれば一意である. +@var{floor(sqrt(m/2))} は @code{isqrt(floor(m/2))} で計算できる. +@end itemize +\E +\BEG +@item +For an integer @var{a}, find a positive integer @var{x} and an intger @var{y} satisfying +@var{xa=y} mod @var{m}, @var{x}, @var{|y|} < @var{b} and @var{GCD(x,y)=1}. +@item +If such @var{x}, @var{y} exist then a list @var{[y,x]} is returned. Otherwise 0 is returned. +@item +If @var{b} is set to @var{floor(sqrt(M/2))}, then @var{x} and @var{y} are unique if they +exist. @var{floor(sqrt(M/2))} can be computed by @code{floor} and @code{isqrt}. +@end itemize +\E + +@example +[2121] M=lprime(0)*lprime(1); +9996359931312779 +[2122] B=isqrt(floor(M/2)); +70697807 +[2123] A=234234829304; +234234829304 +[2124] inttorat(A,M,B); +[-20335178,86975031] +@end example + +@table @t +\JP @item 参照 +\EG @item References +@fref{floor}, @fref{isqrt}. @end table