HOME

TheInfoList



OR:

Within computer engineering and
computer science Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includi ...
, a computer for operations with (mathematical) functions (unlike the usual computer) operates with functions at the hardware level (i.e. without programming these operations).
see also here http://www.sigcis.org/files/SIGCISMC2010_001.pdf and english version here
(see als
here in Russian
(see als
here in Russian


History

A computing machine for operations with functions was presented and developed by Mikhail Kartsev in 1967. Among the operations of this computing machine were the functions addition, subtraction and multiplication, functions comparison, the same operations between a function and a number, finding the function maximum, computing
indefinite integral In calculus, an antiderivative, inverse derivative, primitive function, primitive integral or indefinite integral of a function is a differentiable function whose derivative is equal to the original function . This can be stated symbolicall ...
, computing definite integral of
derivative In mathematics, the derivative of a function of a real variable measures the sensitivity to change of the function value (output value) with respect to a change in its argument (input value). Derivatives are a fundamental tool of calculus. ...
of two functions, derivative of two functions, shift of a function along the X-axis etc. By its
architecture Architecture is the art and technique of designing and building, as distinguished from the skills associated with construction. It is both the process and the product of sketching, conceiving, planning, designing, and constructing building ...
this computing machine was (using the modern terminology) a
vector processor In computing, a vector processor or array processor is a central processing unit (CPU) that implements an instruction set where its instructions are designed to operate efficiently and effectively on large one-dimensional arrays of data calle ...
or ''array processor'', a
central processing unit A central processing unit (CPU), also called a central processor, main processor or just Processor (computing), processor, is the electronic circuitry that executes Instruction (computing), instructions comprising a computer program. The CPU per ...
(CPU) that implements an instruction set containing instructions that operate on
one-dimensional array In computer science, an array is a data structure consisting of a collection of ''elements'' (values or variables), each identified by at least one ''array index'' or ''key''. An array is stored such that the position of each element can be co ...
s of data called ''vectors''. In it there has been used the fact that many of these operations may be interpreted as the known operation on vectors: addition and subtraction of functions - as addition and subtraction of vectors, computing a definite integral of two functions derivative— as computing the vector product of two vectors, function shift along the X-axis – as vector rotation about axes, etc. In 1966 Khmelnik had proposed a functions coding method, i.e. the functions representation by a "uniform" (for a function as a whole) positional code. And so the mentioned operations with functions are performed as unique computer operations with such codes on a "single" arithmetic unit.


Positional codes of one-variable functions


The main idea

The positional code of an integer number A is a numeral notation of digits \alpha in a certain
positional number system Positional notation (or place-value notation, or positional numeral system) usually denotes the extension to any base of the Hindu–Arabic numeral system (or decimal system). More generally, a positional system is a numeral system in which the ...
of the form : A = \alpha_ \alpha_ \dots \alpha_k \dots \alpha_. Such code may be called "linear". Unlike it a positional code of one-variable x function F(x) has the form: : F(x) = \begin \ & \ & \cdots \\ \ & \ & \alpha_ \cdots \alpha_ \cdots \\ \ & \alpha_ & \alpha_ \cdots \alpha_ \cdots \\ \alpha_ & \alpha_ & \alpha_ \cdots \alpha_ \cdots \end and so it is ''flat'' and "triangular", as the digits in it comprise a triangle. The value of the positional number A above is that of the sum : A = \sum_^n \alpha_k \rho^k, where \rho is the radix of the said number system. The positional code of a one-variable function correspond to a 'double' code of the form : F(x) = \sum_^ \sum_^ \alpha_ R^ky^(1-y)^m, where R is an integer positive number, quantity of values that taken \alpha, and y is a certain function of argument x. Addition of positional codes of numbers is associated with the
carry Carry or carrying may refer to: People *Carry (name) Finance * Carried interest (or carry), the share of profits in an investment fund paid to the fund manager * Carry (investment), a financial term: the carry of an asset is the gain or cost of h ...
transfer to a higher digit according to the scheme : \alpha_ \longrightarrow \alpha_. Addition of positional codes of one-variable functions is also associated with the carry transfer to higher digits according to the scheme: : \begin \ \ & \alpha_ \\ \ \nearrow & \ \\ \alpha_ \longrightarrow & \alpha_ \end. Here the same transfer is carried simultaneously to ''two'' higher digits.


''R''-nary triangular code

A triangular code is called ''R-nary'' (and is denoted as TK_R), if the numbers \alpha_ take their values from the set : D_R = \, where r_1,\;r_2\geq 0 and R_^ =r_1+r_2+1. For example, a triangular code is a ternary code TK_3, if \alpha_ \in (-1,0,1), and quaternary TK_4, if \alpha_ \in (-2,-1,0,1).
For ''R''-nary triangular codes the following equalities are valid: : \begin \ \ & 0 \\ \ \nearrow & \ \\ aR \longrightarrow & 0 \end=\begin \ \ & a \\ \ \nearrow & \ \\ 0 \longrightarrow & a \end, \quad \begin \ \ & a \\ \ \nearrow & \ \\ 0 \longrightarrow & 0 \end=\begin \ \ & 0 \\ \ \nearrow & \ \\ aR \longrightarrow & -a \end, \quad \begin \ \ & 0 \\ \ \nearrow & \ \\ 0 \longrightarrow & a \end=\begin \ \ & -a \\ \ \nearrow & \ \\ aR \longrightarrow & 0 \end, where a is an arbitrary number. There exists TK_R of an arbitrary integer real number. In particular, TK_R(\alpha)=\alpha. Also there exists TK_R of any function of the form y^. For instance, TK_R(y^)=(0\ 0\ 1).


Single-digit addition

in R-nary triangular codes consists in the following: * in the given (mk)-digit there is determined the sum S_^ of the digits that are being added \alpha_, \ \beta_ and two carries p_, \ p_, transferred into this digit from the left, i.e. : S_^=\alpha_+\beta_+p_+p_, * this sum is presented in the form S_^=\sigma_+Rp_, where \sigma_ \in D_R, * \sigma_ is written in the (mk)-digit of summary code, and the carry p_ from the given digit is carried into (m,k+1)-digit and (m+1,k+1)—digit. This procedure is described (as also for one-digit addition of the numbers) by a table of one-digit addition, where all the values of the terms \alpha_ \in D_R and \beta_ \in D_R must be present and all the values of carries appearing at decomposition of the sum S_^=\sigma_+Rp_. Such a table may be synthesized for R>2.
Below we have written the table of one-digit addition for R=3:


One-digit subtraction

in R-nary triangular codes differs from the one-digit addition only by the fact that in the given (mk)-digit the value S_^ is determined by the formula : S_^=\alpha_-\beta_+p_+p_.


One-digit division by the parameter R

in R-nary triangular codes is based on using the correlation: : \begin \ \ & a \\ \ \nearrow & \ \\ 0 \longrightarrow & 0 \end=\begin \ \ & 0 \\ \ \nearrow & \ \\ aR \longrightarrow & -a \end, from this it follows that the division of each digit causes carries into two lowest digits. Hence, the digits result in this operation is a sum of the quotient from the division of this digit by R and two carries from two highest digits. Thus, when divided by parameter R * in the given (mk)-digit the following sum is determined : S_^=\alpha_/R-p_/R+p_, * this sum is presented as S_^=\sigma_+p_/R, where \sigma_ \in D_R, * \sigma_ is written into (mk)—digit of the resulting code, and carry p_ from the given digit is transferred into the (m-1,k-1)-digit and (m-1,k)-digit. This procedure is described by the table of one-digit division by parameter R, where all the values of terms and all values of carries, appearing at the decomposition of the sum S_^=\sigma_+p_/R, must be present. Such table may be synthesized for R>2.
Below the table will be given for the one-digit division by the parameter R for R=3:


Addition and subtraction

of R-nary triangular codes consists (as in positional codes of numbers) in subsequently performed one-digit operations. Mind that the one-digit operations in all digits of each column are performed simultaneously.


Multiplication

of R-nary triangular codes. Multiplication of a code TK_R'^ by (mk)-digit of another code TK_R''^ consists in (mk)-shift of the code TK_R'^, i.e. its shift k columns left and m rows up. Multiplication of codes TK_R'^ and TK_R''^ consists in subsequent (mk)-shifts of the code TK_R'^ and addition of the shifted code TK_R'^ with the part-product (as in the positional codes of numbers).


Derivation

of R-nary triangular codes. The derivative of function F(x), defined above, is :\frac=\frac \frac. So the derivation of triangular codes of a function F(x) consists in determining the triangular code of the partial derivative \frac and its multiplication by the known triangular code of the derivative \frac . The determination of the triangular code of the partial derivative \frac is based on the correlation :\frac \begin \ & \ & 0 \\ \ & 0 & \alpha_ \\ 0 & 0 & 0 \end=\begin \ & \ & (k-m) \alpha_ \\ \ & 0 & (k-2m) \alpha_ \\ 0 & 0 & (-m) \alpha_ \end. The derivation method consists of organizing carries from mk-digit into (m+1,k)-digit and into (m-1,k)-digit, and their summing in the given digit is performed in the same way as in one-digit addition.


Coding and decoding

of R-nary triangular codes. A function represented by series of the form : F(x) = \sum_^ A_k y^k, with integer coefficients A_k, may be represented by R-nary triangular codes, for these coefficients and functions y^k have R-nary triangular codes (which was mentioned in the beginning of the section). On the other hand, R-nary triangular code may be represented by the said series, as any term \alpha_ R^ky^k(1-y)^m in the positional expansion of the function (corresponding to this code) may be represented by a similar series.


Truncation

of R-nary triangular codes. This is the name of an operation of reducing the number of "non"-zero columns. The necessity of truncation appears at the emergence of carries beyond the digit net. The truncation consists in division by parameter R. All coefficients of the series represented by the code are reduced R times, and the fractional parts of these coefficients are discarded. The first term of the series is also discarded. Such reduction is acceptable if it is known that the series of functions converge. Truncation consists in subsequently performed one-digit operations of division by parameter R. The one-digit operations in all the digits of a row are performed simultaneously, and the carries from lower row are discarded.


Scale factor

R-nary triangular code is accompanied by a scale factor M, similar to exponent for floating-point number. Factor M permits to display all coefficients of the coded series as integer numbers. Factor M is multiplied by R at the code truncation. For addition factors M are aligned, to do so one of added codes must be truncated. For multiplication the factors M are also multiplied.


Positional code for functions of many variables (see als
here in Russian

Positional code for function of two variables is depicted on Figure 1. It corresponds to a "triple" sum of the form:: F(x,v) = \sum_^ \sum_^ \sum_^ \alpha_ R^k y^(1-y)^ z^(1-z)^,
where R is an integer positive number, number of values of the figure \alpha_, and y(x), ~ z(v) — certain functions of arguments x, ~ v correspondingly. On Figure 1 the nodes correspond to digits \alpha_, and in the circles the values of indexes of the corresponding digit are shown. The positional code of the function of two variables is called "pyramidal". Positional code is called R-nary (and is denoted as PK_R), if the numbers \alpha_ assume the values from the set D_R. At the addition of the codes PK_R the carry extends to four digits and hence R \geq 7. A positional code for the function from several variables corresponds to a sum of the form : F(x_1,\ldots, x_i, \ldots, x_a ) = \sum_^ \sum_^ \ldots \sum_^ (\alpha_ R^k \prod^a_(y_i^(1-y_i)^)), where R is an integer positive number, number of values of the digit \alpha_, and y_i(x_i) certain functions of arguments x_i. A positional code of a function of several variables is called "hyperpyramidal". Of Figure 2 is depicted for example a positional hyperpyramidal code of a function of three variables. On it the nodes correspond to the digits \alpha_, and the circles contain the values of indexes of the corresponding digit. A positional hyperpyramidal code is called R-nary (and is denoted as GPK_R), if the numbers \alpha_ assume the values from the set D_R. At the codes addition GPK_R the carry extends on ''a''-dimensional cube, containing 2^a digits, and hence R \geq (2^-1).


See also

* Hardware acceleration * Digital signal processor


References

{{reflist Encodings Central processing unit Soviet inventions One-of-a-kind computers