コンピュータ工学 と コンピュータサイエンス において 、 (数学的な)関数を扱うコンピュータは (通常の コンピュータ とは異なり) ハードウェア レベルで 関数 を扱う(つまり、これらの演算をプログラミングせずに)ものである。 [1] [2] [3]
歴史
関数演算用の計算機は、1967 年にミハイル・カルツェフによって発表され開発されました。 [1] この計算機の演算には、関数の加算、減算、乗算、関数の比較、関数と数値の間の同じ演算、関数の最大値の検出、 不定積分の計算、2 つの関数の 導関数の 定積分 の 計算 、2 つの関数の導関数、X 軸に沿った関数のシフトなどがありました。 アーキテクチャ 上、この計算機は (現代の用語を使用すると) ベクトル プロセッサ または 配列プロセッサ 、つまり、 ベクトルと呼ばれる 1 次元 のデータ配列 を操作する命令を含む命令セットを実装する 中央処理装置 (CPU) でした。この論文では、これらの演算の多くがベクトルに対する既知の演算として解釈できるという事実が利用されている。関数の加算と減算はベクトルの加算と減算、2 つの関数の定積分の計算、導関数は 2 つのベクトルのベクトル積の計算、X 軸に沿った関数のシフトは軸の周りのベクトルの回転などである。 [1] 1966 年に Khmelnik は関数コーディング法を提案した。 [2] つまり、関数を「統一された」(関数全体に対して) 位置コードで表現する。したがって、関数に対する前述の演算は、そのようなコードを使用して「単一の」 演算ユニット 上で独自のコンピュータ演算として実行される。 [3]
1変数関数の位置コード
出典: [2] [3]
主なアイデア
整数の位置コードは、 特定の 位置数体系 における数字の表記法であり 、次の形式をとる。
あ
{\displaystyle A}
α
{\displaystyle \alpha}
あ
=
α
0
α
1
…
α
け
…
α
ん
{\displaystyle A=\alpha _{0}\alpha _{1}\dots \alpha _{k}\dots \alpha _{n}}
。
このようなコードは「線形」と呼ばれることがあります。これとは異なり、1 変数関数 の位置コードは次のような 形式になります。
x
{\displaystyle x}
F
(
x
)
{\displaystyle F(x)}
F
(
x
)
=
(
⋯
α
22
⋯
α
2
k
⋯
α
11
α
12
⋯
α
1
k
⋯
α
00
α
01
α
02
⋯
α
0
k
⋯
)
{\displaystyle F(x)={\begin{pmatrix}\ &\ &\cdots \\\ &\ &\alpha _{22}\cdots \alpha _{2k}\cdots \\\ &\alpha _{11}&\alpha _{12}\cdots \alpha _{1k}\cdots \\\alpha _{00}&\alpha _{01}&\alpha _{02}\cdots \alpha _{0k}\cdots \end{pmatrix}}}
そして、 その中の数字が三角形を構成するので、
それは 平らで「三角形」です。
上記の位置番号の値は 合計の値です
A
{\displaystyle A}
A
=
∑
k
=
0
n
α
k
ρ
k
{\displaystyle A=\sum _{k=0}^{n}\alpha _{k}\rho ^{k}}
、
ここで、は 前述の数値システムの基数です。1変数関数の位置コードは、次の形式の「double」コードに対応します。
ρ
{\displaystyle \rho }
F
(
x
)
=
∑
k
=
0
n
∑
m
=
0
k
α
m
k
R
k
y
k
−
m
(
1
−
y
)
m
{\displaystyle F(x)=\sum _{k=0}^{n}\sum _{m=0}^{k}\alpha _{mk}R^{k}y^{k-m}(1-y)^{m}}
、
ここで、 は正の整数、 が取る値の数 、 は 引数 の特定の関数です 。
R
{\displaystyle R}
α
{\displaystyle \alpha }
y
{\displaystyle y}
x
{\displaystyle x}
数字の位置コードの追加は、 スキームに従って上位桁への
繰り上がり転送に関連付けられています。
α
k
⟶
α
k
+
1
{\displaystyle \alpha _{k}\longrightarrow \alpha _{k+1}}
。
1変数関数の位置コードの追加は、次のスキームに従って上位桁へのキャリー転送にも関連付けられます。
(
α
k
+
1
,
m
+
1
↗
α
k
,
m
⟶
α
k
+
1
,
m
)
{\displaystyle {\begin{pmatrix}\ \ &\alpha _{k+1,m+1}\\\ \nearrow &\ \\\alpha _{k,m}\longrightarrow &\alpha _{k+1,m}\end{pmatrix}}}
。
ここでは、同じ転送が 2 つの 上位桁に同時に実行されます。
R -nary三角コード
三角コードは R進数 ( と表記 )と呼ばれ、数値が 集合から値を取る
場合、
T
K
R
{\displaystyle TK_{R}}
α
m
k
{\displaystyle \alpha _{mk}}
D
R
=
{
−
r
1
,
−
r
1
+
1
,
…
,
−
1
,
0
,
1
,
…
,
r
2
−
1
,
r
2
}
{\displaystyle D_{R}=\{-r_{1},-r_{1}+1,\dots ,-1,0,1,\dots ,r_{2}-1,r_{2}\}}
、ここで 、および 。
r
1
,
r
2
≥
0
{\displaystyle r_{1},\;r_{2}\geq 0}
R
=
r
1
+
r
2
+
1
{\displaystyle R_{}^{}=r_{1}+r_{2}+1}
たとえば、三角コードは 、 の場合は3 値コード であり 、 の場合は4 値コード です 。 R 値三角コード
の場合、 次の等式が有効です。
T
K
3
{\displaystyle TK_{3}}
α
m
k
∈
(
−
1
,
0
,
1
)
{\displaystyle \alpha _{mk}\in (-1,0,1)}
T
K
4
{\displaystyle TK_{4}}
α
m
k
∈
(
−
2
,
−
1
,
0
,
1
)
{\displaystyle \alpha _{mk}\in (-2,-1,0,1)}
(
0
↗
a
R
⟶
0
)
=
(
a
↗
0
⟶
a
)
,
(
a
↗
0
⟶
0
)
=
(
0
↗
a
R
⟶
−
a
)
,
(
0
↗
0
⟶
a
)
=
(
−
a
↗
a
R
⟶
0
)
{\displaystyle {\begin{pmatrix}\ \ &0\\\ \nearrow &\ \\aR\longrightarrow &0\end{pmatrix}}={\begin{pmatrix}\ \ &a\\\ \nearrow &\ \\0\longrightarrow &a\end{pmatrix}},\quad {\begin{pmatrix}\ \ &a\\\ \nearrow &\ \\0\longrightarrow &0\end{pmatrix}}={\begin{pmatrix}\ \ &0\\\ \nearrow &\ \\aR\longrightarrow &-a\end{pmatrix}},\quad {\begin{pmatrix}\ \ &0\\\ \nearrow &\ \\0\longrightarrow &a\end{pmatrix}}={\begin{pmatrix}\ \ &-a\\\ \nearrow &\ \\aR\longrightarrow &0\end{pmatrix}}}
、
ここで は 任意の数です。 任意の整数実数 が存在します。特に、 です。また、 の形式の任意の関数 も 存在します 。たとえば、 です。
a
{\displaystyle a}
T
K
R
{\displaystyle TK_{R}}
T
K
R
(
α
)
=
α
{\displaystyle TK_{R}(\alpha )=\alpha }
T
K
R
{\displaystyle TK_{R}}
y
k
{\displaystyle y^{k}}
T
K
R
(
y
2
)
=
(
0
0
1
)
{\displaystyle TK_{R}(y^{2})=(0\ 0\ 1)}
一桁の加算
R元三角コードは次のようになります。
与えられた桁では、 加算される桁の 合計と、 左からこの桁に移される 2つの繰り上がりが決定されます。つまり、
(
m
k
)
{\displaystyle (mk)}
S
m
k
{\displaystyle S_{mk}^{}}
α
m
k
,
β
m
k
{\displaystyle \alpha _{mk},\ \beta _{mk}}
p
m
,
k
−
1
,
p
m
−
1
,
k
−
1
{\displaystyle p_{m,k-1},\ p_{m-1,k-1}}
S
m
k
=
α
m
k
+
β
m
k
+
p
m
,
k
−
1
+
p
m
−
1
,
k
−
1
{\displaystyle S_{mk}^{}=\alpha _{mk}+\beta _{mk}+p_{m,k-1}+p_{m-1,k-1}}
、
この合計は という形で表される。 ここで 、
S
m
k
=
σ
m
k
+
R
p
m
k
{\displaystyle S_{mk}^{}=\sigma _{mk}+Rp_{mk}}
σ
m
k
∈
D
R
{\displaystyle \sigma _{mk}\in D_{R}}
σ
m
k
{\displaystyle \sigma _{mk}}
はサマリーコードの - 桁に書き込まれ 、 指定された桁からの繰り上がりは - 桁と — 桁に繰り上がります。
(
m
k
)
{\displaystyle (mk)}
p
m
k
{\displaystyle p_{mk}}
(
m
,
k
+
1
)
{\displaystyle (m,k+1)}
(
m
+
1
,
k
+
1
)
{\displaystyle (m+1,k+1)}
この手順は、1 桁の加算の表によって記述されます (1 桁の数字の加算の場合も同様)。この表では、項 と のすべての値が存在し 、 合計 の分解時に繰り上がりのすべての値が現れる必要があります 。このような表は、 に対して合成できます。
以下に、 に対する 1 桁の加算の表を示します 。
α
m
k
∈
D
R
{\displaystyle \alpha _{mk}\in D_{R}}
β
m
k
∈
D
R
{\displaystyle \beta _{mk}\in D_{R}}
S
m
k
=
σ
m
k
+
R
p
m
k
{\displaystyle S_{mk}^{}=\sigma _{mk}+Rp_{mk}}
R
>
2.
{\displaystyle R>2.}
R
=
3
{\displaystyle R=3}
1桁の引き算
R進三角符号では、与えられた桁の値 が次の式で決定される
という点だけが1桁の加算と異なる。
(
m
k
)
{\displaystyle (mk)}
S
m
k
{\displaystyle S_{mk}^{}}
S
m
k
=
α
m
k
−
β
m
k
+
p
m
,
k
−
1
+
p
m
−
1
,
k
−
1
{\displaystyle S_{mk}^{}=\alpha _{mk}-\beta _{mk}+p_{m,k-1}+p_{m-1,k-1}}
。
パラメータRによる1桁の除算
R元三角符号では相関関係の使用に基づいています。
(
a
↗
0
⟶
0
)
=
(
0
↗
a
R
⟶
−
a
)
{\displaystyle {\begin{pmatrix}\ \ &a\\\ \nearrow &\ \\0\longrightarrow &0\end{pmatrix}}={\begin{pmatrix}\ \ &0\\\ \nearrow &\ \\aR\longrightarrow &-a\end{pmatrix}}}
、
このことから、各桁の割り算は、下位2桁に繰り上がりを引き起こすことがわかります。したがって、この演算の結果の桁は、この桁をRで割った商と上位2桁の2つの繰り上がりの合計です。したがって、パラメータRで割ると、
与えられた桁において 次の合計が決定される
(
m
k
)
{\displaystyle (mk)}
S
m
k
=
α
m
k
/
R
−
p
m
+
1
,
k
/
R
+
p
m
+
1
,
k
+
1
{\displaystyle S_{mk}^{}=\alpha _{mk}/R-p_{m+1,k}/R+p_{m+1,k+1}}
、
この合計は と表され 、ここで 、
S
m
k
=
σ
m
k
+
p
m
k
/
R
{\displaystyle S_{mk}^{}=\sigma _{mk}+p_{mk}/R}
σ
m
k
∈
D
R
{\displaystyle \sigma _{mk}\in D_{R}}
σ
m
k
{\displaystyle \sigma _{mk}}
結果のコードの -桁目に書き込まれ 、 指定された桁からの繰り上がりが - 桁目と - 桁目に転送されます。
(
m
k
)
{\displaystyle (mk)}
p
m
k
{\displaystyle p_{mk}}
(
m
−
1
,
k
−
1
)
{\displaystyle (m-1,k-1)}
(
m
−
1
,
k
)
{\displaystyle (m-1,k)}
この手順は、パラメータ R による 1 桁の除算の表によって記述されます。ここでは、和 の分解で現れる項 の値と繰り上がり の値がすべて 存在している必要があります。このような表は、 に対して合成できます。
以下に、 に対するパラメータ R による 1 桁の除算の表を示します 。
S
m
k
=
σ
m
k
+
p
m
k
/
R
{\displaystyle S_{mk}^{}=\sigma _{mk}+p_{mk}/R}
R
>
2.
{\displaystyle R>2.}
R
=
3
{\displaystyle R=3}
加算と減算
R 元三角コードでは、(数字の位置コードと同様に) 連続して実行される 1 桁の演算で構成されます。各列のすべての桁の 1 桁の演算は同時に実行されることに注意してください。
乗算
R 元三角コード。あるコード と別のコードの - 桁 との乗算は、 コードの - シフト 、つまり k 列左、m 行上のシフトで構成されます。コードと の乗算は 、 コード の その後の- シフト と、シフトされたコードと 部分積の加算で構成されます (数値の位置コードの場合と同様)。
T
K
R
′
{\displaystyle TK_{R}'^{}}
(
m
k
)
{\displaystyle (mk)}
T
K
R
″
{\displaystyle TK_{R}''^{}}
(
m
k
)
{\displaystyle (mk)}
T
K
R
′
{\displaystyle TK_{R}'^{}}
T
K
R
′
{\displaystyle TK_{R}'^{}}
T
K
R
″
{\displaystyle TK_{R}''^{}}
(
m
k
)
{\displaystyle (mk)}
T
K
R
′
{\displaystyle TK_{R}'^{}}
T
K
R
′
{\displaystyle TK_{R}'^{}}
導出
R元三角符号の。 上で定義した関数の導関数は、
F
(
x
)
{\displaystyle F(x)}
∂
F
(
x
)
∂
x
=
∂
y
∂
x
∂
F
(
x
)
∂
y
{\displaystyle {\frac {\partial F(x)}{\partial x}}={\frac {\partial y}{\partial x}}{\frac {\partial F(x)}{\partial y}}}
。
したがって、関数の三角コードの導出は、 偏微分の三角コードを決定し 、それを既知の微分三角コードで乗算することから成ります 。偏微分の三角コードの決定は、 相関関係に基づいています。
F
(
x
)
{\displaystyle F(x)}
∂
F
(
x
)
∂
y
{\displaystyle {\frac {\partial F(x)}{\partial y}}}
∂
y
∂
x
{\displaystyle {\frac {\partial y}{\partial x}}}
∂
F
(
x
)
∂
y
{\displaystyle {\frac {\partial F(x)}{\partial y}}}
∂
∂
x
(
0
0
α
m
k
0
0
0
)
=
(
(
k
−
m
)
α
m
k
0
(
k
−
2
m
)
α
m
k
0
0
(
−
m
)
α
m
k
)
{\displaystyle {\frac {\partial }{\partial x}}{\begin{pmatrix}\ &\ &0\\\ &0&\alpha _{mk}\\0&0&0\end{pmatrix}}={\begin{pmatrix}\ &\ &(k-m)\alpha _{mk}\\\ &0&(k-2m)\alpha _{mk}\\0&0&(-m)\alpha _{mk}\end{pmatrix}}}
。
導出法は、mk 桁の繰り上がりを (m+1,k) 桁と (m-1,k) 桁に整理し、指定された桁でのそれらの合計を 1 桁の加算と同じ方法で実行することから構成されます。
コーディングとデコーディング
R元三角符号の。次の形式の級数で表される関数
F
(
x
)
=
∑
k
=
0
n
A
k
y
k
{\displaystyle F(x)=\sum _{k=0}^{n}A_{k}y^{k}}
、
整数係数を持つものは 、R元三角コードで表すことができます。これらの係数と関数は R元三角コードを持つためです(このセクションの冒頭で説明しました)。一方、R元三角コードは前述の数列で表すことができます。これは、 関数の位置展開の任意の項(このコードに対応)が同様の数列で表すことができるためです。
A
k
{\displaystyle A_{k}}
y
k
{\displaystyle y^{k}}
α
m
k
R
k
y
k
(
1
−
y
)
m
{\displaystyle \alpha _{mk}R^{k}y^{k}(1-y)^{m}}
切り捨て
R 元三角コード。これは、ゼロ以外の列の数を減らす操作の名前です。桁のネットを超える桁上がりが発生したときに、切り捨てが必要になります。切り捨ては、パラメータ R による除算です。コードによって表される数列のすべての係数は R 回減らされ、これらの係数の小数部分は破棄されます。数列の最初の項も破棄されます。関数のシリーズが収束することがわかっている場合は、このような削減が許容されます。切り捨ては、パラメータ R による除算の 1 桁の演算を続けて実行することです。行のすべての桁の 1 桁の演算は同時に実行され、下位の行からの桁上がりは破棄されます。
スケール係数
R 元三角コードには、浮動小数点数の指数に似たスケール係数 M が伴います。係数 M により、コード化されたシリーズのすべての係数を整数として表示できます。係数 M は、コードの切り捨て時に R で乗算されます。加算の場合、係数 M は揃えられますが、そのためには追加されたコードの 1 つを切り捨てる必要があります。乗算の場合も、係数 M が乗算されます。
多数の変数を持つ関数の位置コード
出典: [4]
2 変数関数の位置コードは、図 1 に示されています。これは、形式 の「3 重」和に対応します。
ここで 、 は正の整数、数値 の値の数 、および —は それぞれ引数の特定の関数です。図 1 のノードは数字 に対応し 、円には対応する数字のインデックスの値が表示されます。2 変数関数の位置コードは「ピラミッド型」と呼ばれます。 数値が 集合 の値をとる場合は、 位置コードは R 進数 ( と表記) と呼ばれます 。コードを加算すると、 桁上がりが 4 桁に拡張されるため になります 。
F
(
x
,
v
)
=
∑
k
=
0
n
∑
m
1
=
0
k
∑
m
2
=
0
k
α
m
1
,
m
2
,
k
R
k
y
k
−
m
1
(
1
−
y
)
m
1
z
k
−
m
2
(
1
−
z
)
m
2
{\displaystyle F(x,v)=\sum _{k=0}^{n}\sum _{m1=0}^{k}\sum _{m2=0}^{k}\alpha _{m1,m2,k}R^{k}y^{k-m1}(1-y)^{m1}z^{k-m2}(1-z)^{m2}}
R
{\displaystyle R}
α
m
1
,
m
2
,
k
{\displaystyle \alpha _{m1,m2,k}}
y
(
x
)
,
z
(
v
)
{\displaystyle y(x),~z(v)}
x
,
v
{\displaystyle x,~v}
α
m
1
,
m
2
,
k
{\displaystyle \alpha _{m1,m2,k}}
m
1
,
m
2
,
k
{\displaystyle {m1,m2,k}}
P
K
R
{\displaystyle PK_{R}}
α
m
1
,
m
2
,
k
{\displaystyle \alpha _{m1,m2,k}}
D
R
{\displaystyle D_{R}}
P
K
R
{\displaystyle PK_{R}}
R
≥
7
{\displaystyle R\geq 7}
複数の変数からの関数の位置コードは、次の形式の合計に対応する。
F
(
x
1
,
…
,
x
i
,
…
,
x
a
)
=
∑
k
=
0
n
∑
m
1
=
0
k
…
∑
m
a
=
0
k
(
α
m
1
,
…
,
m
a
,
k
R
k
∏
i
=
1
a
(
y
i
k
−
m
i
(
1
−
y
i
)
m
i
)
)
{\displaystyle F(x_{1},\ldots ,x_{i},\ldots ,x_{a})=\sum _{k=0}^{n}\sum _{m_{1}=0}^{k}\ldots \sum _{m_{a}=0}^{k}(\alpha _{m_{1},\ldots ,m_{a},k}R^{k}\prod _{i=1}^{a}(y_{i}^{k-m_{i}}(1-y_{i})^{m_{i}}))}
、
ここで、 は 整数の正数、数字 の値の数 、および 引数 の特定の関数です 。複数の変数の関数の位置コードは「ハイパーピラミッド」と呼ばれます。図 2 には、たとえば 3 つの変数の関数の位置ハイパーピラミッド コードが示されています。図上のノードは数字 に対応し 、円には対応する数字のインデックスの値が含まれます。 数字が 集合 の値をとる場合、 位置ハイパーピラミッド コードは R 進数 ( と表記) と呼ばれます 。コードの追加時に、桁上げは 数字を 含む - 次元の立方体 に 拡張されるため、 になります 。
R
{\displaystyle R}
α
m
1
,
…
,
m
a
,
k
{\displaystyle \alpha _{m_{1},\ldots ,m_{a},k}}
y
i
(
x
i
)
{\displaystyle y_{i}(x_{i})}
x
i
{\displaystyle x_{i}}
α
m
1
,
m
2
,
m
3
,
k
{\displaystyle \alpha _{m1,m2,m3,k}}
m
1
,
m
2
,
m
3
,
k
{\displaystyle {m1,m2,m3,k}}
G
P
K
R
{\displaystyle GPK_{R}}
α
m
1
,
…
,
m
a
,
k
{\displaystyle \alpha _{m_{1},\ldots ,m_{a},k}}
D
R
{\displaystyle D_{R}}
G
P
K
R
{\displaystyle GPK_{R}}
2
a
{\displaystyle 2^{a}}
R
≥
(
2
a
−
1
−
1
)
{\displaystyle R\geq (2^{a-1}-1)}
参照
参考文献
^ abc Malinovsky, BN (1995). 顔に見るコンピュータ技術の歴史 (ロシア語) 。キエフ: 会社「KIT」 。ISBN 5-7707-6131-8 。 (こちらも参照してください http://www.sigcis.org/files/SIGCISMC2010_001.pdf および英語版はこちら)
^ abc Khmelnik, SI (1966). 「関数のコーディング」 4 . サイバネティクス、ソ連科学アカデミー。 が必要です(ロシア語版も参照してください)
^ abc Khmelnik, SI (2004). コンピュータ関数演算。アルゴリズムとハードウェア設計 。イスラエル 。ISBN 978-0-557-07520-1 。 (ロシア語版も参照) CS1 maint: location missing publisher (link)
^ Khmelnik, SI (1970). 「いくつかのタイプの位置関数コード」 5 . サイバネティクス、ソ連科学アカデミー。 が必要です(ロシア語版も参照してください)