1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338
|
\section{数値演算}
\markright{\arabic{section}. 数値演算}
\subsection{数値演算定数}
\begin{refdesc}
\constdesc{most-positive-fixnum}{
\#x1fffffff=536,870,911。{\tt integer}の正の最大値。}
\constdesc{most-negative-fixnum}{
-\#x20000000= -536,870,912。{\tt integer}の負の最大値}
\constdesc{short-float-epsilon}{
IEEEの浮動小数点表現形式である{\tt float}は、
21ビットの固定小数(うち符号
が1ビット)と7ビットの指数(うち符号が1ビット)で構成されている。
したがって、浮動小数点誤差$\epsilon$は $2^{-21}= 4.768368 \times 10^{-7}$となる。}
\constdesc{single-float-epsilon}{
{\bf short-float-epsilon}と同様に $2^{-21}$である。}
\constdesc{long-float-epsilon}{
Euslispには、doubleもlong floatもないため、
{\bf short-float-epsilon}と同様に$2^{-21}$である。}
\constdesc{pi}{
$\pi$。 実際には 3.14159203で、 3.14159265ではない。}
\constdesc{2pi}{
$2\times \pi$。}
\constdesc{pi/2}{
$\pi/2$。}
\constdesc{-pi}{
-3.14159203。}
\constdesc{-2pi}{
$-2\times \pi$。}
\constdesc{-pi/2}{
$-\pi/2$。}
\end{refdesc}
\subsection{比較演算関数}
\begin{refdesc}
\funcdesc{numberp}{object}{
{\em object}が{\tt integer}か{\tt float}の時、Tを返す。
その文字が数字で構成されているときも同様である。}
\funcdesc{integerp}{object}{
{\em object}が{\tt integer}の時、Tを返す。
{\tt float}は{\bf round, trunc}および{\bf ceiling}関数で{\tt integer}に変換できる。}
\funcdesc{floatp}{object}{
{\em object} が {\tt float} の時 T を返す。
{\tt integer}は{\bf float}関数で{\tt float}に変換できる。}
\funcdesc{zerop}{number}{
{\em number}が{\tt integer}のゼロまたは
{\tt float}の0.0の時、 Tを返す。}
\funcdesc{plusp}{number}{
{\em number}が正(ゼロは含まない)のとき、Tを返す。}
\funcdesc{minusp}{number}{
{\em number}が負のとき、Tを返す。}
\funcdesc{oddp}{integer}{
{\em integer}が奇数のとき、Tを返す。引数は{\tt integer}のみ有効。}
\funcdesc{evenp}{integer}{
{\em integer}が偶数のとき、Tを返す。引数は{\tt integer}のみ有効。}
\funcdesc{/=}{num1 num2 \&rest more-numbers}{
{\em num1}と{\em num2}、{\em more-numbers}でどの2つの数値も等しくないとき、Tを返す。それ以外はNILを返す。
{\em num1}と{\em num2}、{\em more-numbers}を構成する要素はすべて数値であること。}
\funcdesc{=}{num1 num2 \&rest more-numbers}{
{\em num1}と{\em num2}、{\em more-numbers}がすべて等しいとき、Tを返す。
{\em num1}と{\em num2}、{\em more-numbers}を構成する要素はすべて数値であること。}
\funcdesc{$>$}{num1 num2 \&rest more-numbers}{
{\em num1}、{\em num2}、{\em more-numbers}の全要素がこの順に単調減少であるとき、Tを返す。
{\em num1}と{\em num2}、{\em more-numbers}を構成する要素はすべて数値であること。
誤差を含めた数値比較に対しては、
\ref{Geometry}章に書かれている関数({\bf eps$>$})を使用する。}
\funcdesc{$<$}{num1 num2 \&rest more-numbers}{
{\em num1}、{\em num2}、{\em more-numbers}の全要素がこの順に単調増加であるとき、Tを返す。
{\em num1}と{\em num2}、{\em more-numbers}を構成する要素はすべて数値であること。
誤差を含めた数値比較に対しては、
\ref{Geometry}章に書かれている関数({\bf eps$<$})を使用する。}
\funcdesc{$>=$}{num1 num2 \&rest more-numbers}{
{\em num1}、{\em num2}、{\em more-numbers}の全要素がこの順に単調非増加であるとき、Tを返す。
{\em num1}と{\em num2}、{\em more-numbers}を構成する要素はすべて数値であること。
誤差を含めた数値比較に対しては、
\ref{Geometry}章に書かれている関数({\bf eps$>=$})を使用する。}
\funcdesc{$<=$}{num1 num2 \&rest more-numbers}{
{\em num1}、{\em num2}、{\em more-numbers}の全要素がこの順に単調非減少であるとき、Tを返す。
{\em num1}と{\em num2}、{\em more-numbers}を構成する要素はすべて数値であること。
誤差を含めた数値比較に対しては、
\ref{Geometry}章に書かれている関数({\bf eps$<=$})を使用する。}
\end{refdesc}
\subsection{整数とビット毎の操作関数}
以下の関数の引数は、すべて{\tt integer}とする。
\begin{refdesc}
\funcdesc{mod}{dividend divisor}{
{\em dividend} を {\em divisor}で割った余りを返す。
{\tt (mod 6 5)=1, (mod -6 5)=-1, (mod 6 -5)=1, (mod -6 -5)=-1}.}
\funcdesc{1-}{number}{
$number-1$ を返す。}
\funcdesc{1+}{number}{
$number+1$ を返す。}
\funcdesc{logand}{\&rest integers}{
{\em integers}のビット単位AND。}
\funcdesc{logior}{\&rest integers}{
{\em integers}のビット単位OR。}
\funcdesc{logxor}{\&rest integers}{
{\em integers}のビット単位XOR。}
\funcdesc{logeqv}{\&rest integers}{
{\bf logeqv}は{\tt (lognot (logxor ...))}と同等である。}
\funcdesc{lognand}{\&rest integers}{
{\em integers}のビット単位NAND。}
\funcdesc{lognor}{\&rest integers}{
{\em integers}のビット単位NOR。}
\funcdesc{lognot}{integer}{
{\em integer}のビット反転。}
\funcdesc{logtest}{integer1 integer2}{
{\tt (logand {\em integer1 integer2})}がゼロでないとき T を返す。}
\funcdesc{logbitp}{index integer}{
{\em integer}がNILでなければ、LSBから数えて {\em index}番目の
ビットが 1 のとき T を返す。}
\funcdesc{ash}{integer count}{
数値演算左シフト。
もし {\em count} が正のとき、{\em integer}を左にシフトする。
もし {\em count} が負のとき、
{\em integer} を $\vert${\em count}$\vert$ ビット右にシフトする。}
\funcdesc{ldb}{target position \&optional (width 8)}{
LoaD Byte.
{\bf ldb} や {\bf dpb} のByte型は、 EusLispにないため、代りに
2個の {\tt integer} を使用する。
{\em target} のLSBより{\em position}番目の位置からMSBへ {\em width} ビットの
範囲を抜き出す。例えば、 {\tt (ldb \#x1234 4 4)} は 3となる。}
\funcdesc{dpb}{value target position \&optional (width 8)}{
DePosit Byte.
{\em target}のLSBより{\em position}番目の位置へ{\em value}を
{\em width}ビット置き換える。}
\end{refdesc}
\subsection{一般数値関数}
\begin{refdesc}
\funcdesc{+}{\&rest numbers}{
{\em numbers}の和を返す。}
\funcdesc{-}{num \&rest more-numbers}{
もし {\em more-numbers} が与えられたとき、{\em num}より引く。
そうでないとき、{\em num} は符号反転される。}
\funcdesc{*}{\&rest numbers}{
{\em numbers}の積を返す。}
\funcdesc{/}{num \&rest more-numbers}{
{\em num} を、{\em more-numbers}で割り算する。
{\em num} のみ渡された場合、1.0を{\em num}で割り算する。
全ての引数が{\tt integer}のとき、{\tt integer}を返し、
引数に1つでも{\tt float}があったときは、{\tt float}を返す。}
\funcdesc{abs}{number}{
{\em number}の絶対値を返す。}
\funcdesc{round}{number}{
{\em number}の小数第1位を四捨五入し {\tt integer}を返す。
{\tt (round 1.5)=2, (round -1.5)=-2}.}
\funcdesc{floor}{number}{
{\em number}の小数を切捨てる。
{\tt (floor 1.5)=1, (floor -1.5)=-2}.}
\funcdesc{ceiling}{number}{
{\em number}の小数を切り上げる。
{\tt (ceiling 1.5)=2, (ceiling -1.5)=-1}.}
\funcdesc{truncate}{number}{
{\em number}が正のときは切捨て、負のときは切り上げる。
{\tt (truncate 1.5)=1, (truncate -1.5)=-1}.}
\funcdesc{float}{number}{
{\em number}を{\tt float}にして返す。}
\funcdesc{max}{num \&rest more-numbers}{
{\em num}と{\em more-numbers}の中から、最大値をさがす。}
\funcdesc{min}{num \&rest more-numbers}{
{\em num}と{\em more-numbers}の中から、最小値をさがす。}
\funcdesc{make-random-state}{\&optional (state *random-state*)}{
{\em random}関数の{\em randstate}のための{\em random-state}オブジェクトを返す。
もし {\em state} が{\em random-state}のとき、そのオブジェクトのコピーを返す。
{\em state}がTのとき、ランダムに初期化された新たなオブジェクトを返す。
そうでないとき、現在の{\em *random-state*}のコピーを返す。}
\funcdesc{random}{range \&optional (state *random-state*)}{
0あるいは0.0 から {\em range}までの乱数を返す。
もし {\em range} が {\tt integer}のとき、
{\tt integer} に変換して返す。
そうでないとき、{\tt float} を返す。
オプションの{\em state} は、決まった乱数列で表される。
{\em randstate}に特別なデータの型はなく、
2つの要素からなる 整数ベクトルで表される。}
\macrodesc{incf}{variable \&optional (increment 1)}{
{\em variable} は一般の変数である。
{\em variable} は、{\em increment}だけ増加され、
{\em variable}に戻される。}
\macrodesc{decf}{variable \&optional (decrement 1)}{
{\em variable} は一般の変数である。
{\em variable} は、{\em decrement}だけ減少され、
{\em variable}に戻される。}
\funcdesc{reduce}{func seq}{
2変数操作の{\em func}関数を用いて、{\em seq}の中の全ての要素を結合させる。
例えば、{\tt (reduce \#'expt '(2 3 4)) = (expt (expt 2 3) 4)=4096}.}
\funcdesc{rad2deg}{radian}{
ラジアン値を 度数表現に変換する。
\#R は同じものである。
EusLisp の中での角度の表記はラジアンであり、
EusLisp 内の全ての関数が要求する角度引数は、ラジアン表現である。}
\funcdesc{deg2rad}{degree}{
角度値をラジアン表現に変換する。
また \#D でも実行できる。}
\end{refdesc}
\subsection{基本関数}
\begin{refdesc}
\funcdesc{sin}{theta}{
{\em theta} はラジアンで表される {\tt float} 値。
$\sin(theta)$を返す。}
\funcdesc{cos}{theta}{
{\em theta} はラジアンで表される {\tt float} 値。
$\cos(theta)$を返す。}
\funcdesc{tan}{theta}{
{\em theta} はラジアンで表される {\tt float} 値。
$\tan(theta)$を返す。}
\funcdesc{sinh}{x}{
hyperbolic sine、
$\frac{e^{x}-e^{-x}}{2}$で表される。}
\funcdesc{cosh}{x}{
hyperbolic cosine、
$\frac{e^{x}+e^{-x}}{2}$で表される。}
\funcdesc{tanh}{x}{
hyperbolic tangent、
$\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$で表される。}
\funcdesc{asin}{x}{
arc sine.}
\funcdesc{acos}{x}{
arc cosine.}
\funcdesc{atan}{y \&optional x}{
{\bf atan} が1つの引数だけのとき、arctangent を計算する。
2つの引数のとき、{\tt atan}$(y/x)$ を計算する。}
\funcdesc{asinh}{x}{
hyperbolic arc sine.}
\funcdesc{acosh}{x}{
hyperbolic arc cosine.}
\funcdesc{atanh}{x}{
hyperbolic arc tangent.}
\funcdesc{sqrt}{number}{
{\em number} の平方根を返す。}
\funcdesc{log}{number \&optional base}{
{\em number} の自然対数を返す。
{\em base}が渡された時、{\em base}に対する{\em number}の対数を返す。}
\funcdesc{exp}{x}{
$e^{x}$を返す。}
\funcdesc{expt}{a x}{
$a^{x}$を返す。}
\end{refdesc}
\subsection{拡張された数字}
\begin{refdesc}
\classdesc{ratio}{extended-number}{(numerator denominator)}{
有理数を記述する。}
\methoddesc{:init}{num denom}{
有理数のインスタンスを、分子{\em num}分母{\em denom}として初期化する。}
\classdesc{complex}{extended-number}{(real imaginary)}{
複素数を記述する。}
\methoddesc{:init}{re im}{
複素数のインスタンスを、実部{\em re}虚部{\em im}として初期化する。}
\end{refdesc}
\newpage
|