File: jarith.tex

package info (click to toggle)
euslisp 9.27%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 55,344 kB
  • sloc: ansic: 41,162; lisp: 3,339; makefile: 256; sh: 208; asm: 138; python: 53
file content (338 lines) | stat: -rw-r--r-- 11,704 bytes parent folder | download | duplicates (3)
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