A METHOD AND SYSTEM FOR PROCESSING COMPLEX NUMBERS

Abstract: The invention provides a method and apparatus for storing complex number data in formats or codes which allow efficient complex number arithmetic operations to be performed and for performing such complex number arithmetic operations. According to one aspect of the invention, a method for coding complex numbers is provided for use in a data processing system. In response to receiving an instruction, two data elements representing the real and imaginary parts of a complex number are read. These two elements are then used to generate a single code for the complex number which is stored as a single data element. As a result of this coding, arithmetic operations on complex numbers may be performed on a single data element which contains both real and imaginary data. According to another aspect of the invention, a coprocessor is described. This coprocessor has stored therein data representing sequences of instructions which, when combined with certain unique circuitry also contained therein and executed, cause the coprocessor to perform the above described method and to perform complex number arithmetic operations.

Description: A METHOD AND SYSTEM FOR PROCESSING COMPLEX NUMBERS The invention relates to the field of data processing systems. More specifically, the invention relates to a coprocessor for performing arithmetic operations on complex numbers. BACKGROUND OF THE INVENTION Arithmetic operations involving complex numbers are commonly required in data processing systems used in fields as varied as power system control, underwater acoustics, tomography, laser holography, 3D graphics, navigation, theoretical physics, telecommunications, and the like. These operations may include addition, subtraction, multiplication, division, comparison, logarithms, binomials, potentiating, square roots, cube roots, sine, cosine, hyperbolic functions, polar/cartesian coordinates, and fast fourier transforms, to name a few. A complex number Z may be represented by a real part Xa and an imaginary part Xb, where Z = Xa + j Xb, and where Xa and Xb are real numbers (positive or negative) and j = (-l) Λ (l/2). Problems related to efficiently performing arithmetic operations arise as the complex number represents a vector rather than a scalar quantity. That is, for each complex variable involved in a given arithmetic operation, two components of the number must be considered, its real and imaginary parts, rather than the one real component that would be involved for each number in an operation involving just real numbers. For example, given two real numbers Xal and Xa2, their sum is given by Xal + Xa2 and their product by Xal * Xa2. However, for two complex numbers Zl = Xal + j Xbl and Z2 = Xa2 + j Xb2, their sum and product are given by the more complicated expressions (Xal + Xa2) + j (Xbl + Xb2) and (Xal * Xa2 - Xbl * Xb2) + j (Xal * Xb2 + Xbl * Xa2), respectively. It is apparent that arithmetic operations involving complex numbers require significantly greater data processing system resources. In the prior art, methods of packing data and performing specific arithmetic operations on complex numbers have been disclosed. For example, United States Patent Number 5,936,872 (Fischer et al.) describes a method and apparatus for storing complex numbers in packed form and performing packed operations thereon to allow for their efficient multiplication. In Fischer, the real and imaginary parts of a complex number are manipulated individually in the performance of the multiplication operation. In other words, the real and imaginary parts of the complex number are treated as separate data elements. The real and imaginary parts of a complex number are stored in binary format in the standard base 2 format or code. In general, a real number Xa may be expressed in base 2 by the code K(Xa) = ...a(m)...a(2), a(l), a(0), a(-l), a(-2)..., where m is the mth digit in the code, a(m) = {0,1}, and Xa = Sum(m) [ a(m) * 2 Λ m]. Thus K(Xa) is simply a standard binary representation of the number Xa as a sequence of coefficients of successive powers of the base. This coding system may be represented symbolically by the function f(p,m) = p Λ m, where p is the base and m is the mth digit. Under this coding system, for example, if Xa = 7, one could write Xa = (1 * 2 Λ 2) + (1 * 2 Λ 1) + (1 * 2 Λ 0) or the code K(Xa) = K (7) = 111. As another example, if Xb = 4, one could write Xb = (1 * 2 2) + (0 * 2 Λ 1) + (0 * 2 Λ 0) or the code K(Xb) = K(4) = 100. And, for a complex number Z = Xa + jXb = 7 + j 4, one could write K(Z) = K(7 + j4) = (111) + j (100). In this base 2 system, therefore, the code for the complex number has two separate data elements associated with it (i.e.. one data element for the real part and one data element for the imaginary part). Arithmetic operations performed on these individual data elements are very cumbersome. There is thus a need for a method and system of more efficiently representing or coding complex numbers and an apparatus for performing arithmetic operations on these coded complex numbers that will improve the efficiency of arithmetic operations involving complex numbers in data processing systems. It is desirable to perform arithmetic operations on complex numbers that are represented by a single data element (i.e. one data element for both the real and imaginary parts). SUMMARY OF THE INVENTION In accordance with this invention there is provided a method and apparatus for storing complex number data in formats or codes which allow efficient complex number arithmetic operations to be performed and for performing such complex number arithmetic operations. According to one aspect of the invention, a method for coding complex numbers is provided for use in a data processing system. In response to receiving an instruction, two data elements representing the real and imaginary parts of a complex number are read. These two elements are then used to generate a single code for the complex number which is stored as a single data element. As a result of this coding, arithmetic operations on complex numbers may be performed on a single data element which contains both real and imaginary data. According to another aspect of the invention, a coprocessor is described. This coprocessor has stored therein data representing sequences of instructions which, when combined with certain unique circuitry also contained therein and executed, cause the coprocessor to perform the above described method and to perform complex number arithmetic operations. BRIEF DESCRIPTION OF THE DRAWINGS The invention may best be understood by referring to the following description and accompanying drawings which illustrate the invention. In the drawings: FIG. 1.1. is a graphical representation of four basic function values in a first coding system; FIG. 1.2. is a graphical representation of four basic function values in a second coding system; FIG. 1.3. is a graphical representation of four basic function values in a third coding system; FIG. 1.4. is a graphical representation of four basic function values in a fourth coding system; FIG. 2.1. shows a block diagram illustrating the computation of the k th digit in accordance with algorithm 2.1; FIG. 2.2. shows a block diagram illustrating the Carry Distribution Pattern in accordance with algorithm 2.1; FIG. 2.3. shows a block diagram illustrating the Carry Distribution Pattem in the first and second coding system; FIG. 2.4. shows a block diagram illustrating the computation of the k th digit in accordance with algorithm 2.2; FIG. 2.6. shows a block diagram illustrating the Carry Distribution Pattern in the third coding system; FIG. 2.7. shows a block diagram illustrating the Carry Distribution Pattern in the fourth coding system; FIG. 2.8. shows a block diagram illustrating a unit for successive multiplication of complex numbers; FIG. 2.9. shows a block diagram illustrating a unit for the matrix multiplication of complex numbers; FIG. 3.1. illustrates the Elementary Operations Sequence of Algorithm 3.1; FIG. 4.1. shows a block diagram illustrating an exemplary comparison unit for low-digit complex codes by the modulus; FIG. 4.2. 9 shows a block diagram illustrating an exemplary unequal high-order digit number comparison unit; FIG. 4.3. shows a block diagram illustrating an exemplary comparison unit for multidigit complex codes by the modulus; FIG. 4.4. shows a block diagram illustrating an exemplary algebraic adder of M-codes; FIG. 1 shows a block diagram illustrating an exemplary data processing system including a complex number coprocessor according to one embodiment of the invention; FIG. 2 shows a block diagram illustrating an exemplary complex number coprocesser arithmetic unit; FIG. 3 illustrates exemplary circuitry for carry-in determination in the coding system where p= -2, p = j * (2 Λ (l/2)), or p = - j * (2 Λ (l/2)); FIG. 4 illustrates exemplary circuitry for carry-in determination in the coding system where p = -1 + j or p = -1 - j; FIG. 5 illustrates exemplary circuitry for carry-in determination in the coding system where p = H * (-1 + j * (7 Λ (l/2))); FIG. 6 illustrates the coding method steps according to one embodiment of the invention; FIG. 7 illustrates the decoding method steps according to one embodiment of the invention; FIG. 8 shows a block diagram illustrating an exemplary comparison unit for low-digit complex codes by the modulus; FIG. 9 shows a block diagram illustrating an exemplary unequal high-order digit number comparison unit; FIG. 10 shows a block diagram illustrating an exemplary comparison unit for multidigit complex codes by the modulus; FIG. 11 shows a block diagram illustrating an exemplary algebraic adder of M-codes; FIG. 12 shows a table listing formula for six coding systems according to one embodiment of the invention. DETAILED DESCRIPTION OF PREFERRED EMBODIMENTS In order to better understand the invention, a theoretical description is presented first. This is followed by a description of the preferred embodiment. THEORETICAL DESCRIPTION The following theoretical description will address the following matters: 1. Complex numbers coding method 1.1. General Provisions 1.2. Coding System 1 1.3. Coding System 2 1.4. Coding System 3 1.5. Coding System 4 2. Arithmetic Operations With Complex Number Codes 2.1. Bitwise Operations 2.2. First Bitwise Operation Algorithm 2.3. Second Bitwise Operation Algorithm 2.4. Coding and Decoding of Complex Numbers 2.5. Multiplication of Complex Numbers 3. Division and Computation of Elementary Functions of a Complex Variable 3.1. "Digit by Digit" Method 3.2. Decomposition 3.3. Composition 3.4. Two-step Operations 3.5. Computational Algorithms 3.5.1. Division of Complex Numbers 3.5.2. Determination of the Natural Logarithm of a Complex Number (Option 1) 3.5.3. Determination of the Natural Logarithm of a Complex Number (Option 2) 3.5.4. Computation of Complex Number Modulus Logarithm 3.5.5. Computation of Complex Number Argument (Option 1) 3.5.6. Complex Number Square-rooting 3.5.7. Computation of Complex Number Argument (Option 2) 3.5.8. Conjugated Number Square-rooting 3.5.9. Computation of Complex Number Modulus 3.5.10. Complex Number Exponentiation 3.5.11. Transformation of Polar Coordinates into Rectangular Ones 3.5.12. Transition of Polar Coordinates to Rectangular Ones 4. Processor Structure 4.1. Data Representation 4.2. Microprogrammed Control Unit 4.3. Operational Units 4.3.1. Comparison Unit of Low-digit Complex Codes by the Modulus 4.3.2. Unequal High-order Digit Number Comparison Unit 4.3.3. Comparison Unit of Multidigit Complex Codes by the Modulus 4.3.4. Algebraic Adder of M-codes 1. Complex Numbers Coding Method 1.1. General Provisions The following method of positional coding of complex numbers is proposed. A complex number, where m is the number of the decomposition digit, C m = -J 0, 1 J- is the decomposition digit value, P is the decomposition base, and (A m) is the basic function of the number and base. The binary positional code of the complex number, Z , relevant to this decomposition looks like this: κ(z) =. . a m ... (i.2) We will also designate and record the positional code of the complex number, Z , to the p base as follows: ***ζ Z -> 0 — O n ... CC - • • • placing the point between the zero and the (-1) digits (the base index will not be specified if the base value is clear from the context). The complex number, Z , in the code of which m ≥ O , will be designated as a p -integer. The p -fractionals (proper and improper) of the complex number, Z , will be determined accordingly. In particular < p > p = \ 0 (1.3) Positional codes of real positive numbers are well-known. Positional codes to the base of (-2) for real positive and negative numbers are also known. For complex numbers, the different positional numerical systems with real and complex bases will be built further on. The symbol, j, will be used to designate an imaginary unit therein. The most interesting among positional coding systems are those, to which simple algorithms of addition and multiplication are applicable. We shall consider these systems further, referring to them as arithmetical, but first we have to define them more precisely. Definition. A positional coding system is referred to as arithmetical, if it satisfies the following statement: If the numbers Z x and Z 2 can be represented in the positional coding system, then the numbers -Z 1 , -Z 2 , Z x + Z 2 and Z x Z 2 can also be represented in this system. Lemma. A numerical system is arithmetical if i.e. the codes of numbers (2) and (-2) are p -integers with a zero value of the zero digit. Validity of this lemma, as will be shown further, follows from the fact that there exist arithmetical operation algorithms for such systems. Theorem. A numerical system, in which the number, (2), is decomposed as per (1.4) and is arithmetical. Proof. It follows from (1.4) and (1.5) that the theorem deals with systems where the number 2 has an integral code, which contains precisely two unit digits (and any number of zero digits). Let us consider, for example, the following algorithm of code formation of (-2): 1010 carries 1010 carries 1010 carries 1010 = < 2 > n summand 1 110 = < X > „ summand 2 00000000 sum Here the number 2 code is added to the code of a certain number, X, the digits whereof are generated so that the sum of numbers in the column would equal 2. At the same time, and due to (1.6), the numbers in each column add up to 2, which forms the carry to zero digit of the sum. As a result, infinite carries are formed, and a zero sum. Consequently, X= -2. Obviously, such a formation algorithm is always executable if theorem conditions are fulfilled. This algorithm results in the number (-2) code of (1.5) type. Consequently, conditions of the lemma are fulfilled and the system is arithmetical. And thus the theorem is proved. The theorem will be further used for positional coding systems search. 1.2. Coding System 1 Let a and X o be real (positive and negative) numbers, specified by decompositions to the base of p = -2, i.e. These decompositions have corresponding codes K(X a ) = ..a m ..., K(x β ) =... β m ... (i.8) In particular, in the real numbers coding system to the base of (-2), the code is K(2) =1 10, i.e. it is arithmetical. Let us designate a pair of digits, a m and β m , by one number, σ m . The code κ(z) = σ m, ' " (1-9) of the complex number, Z = X a + jX β , is generated to the base of/? = -2 with the <J m digits assuming one of these four values: σ m e { 0, l,j, 1+j }. Let us review the complex function Here the code (1.9) of the complex number to the base of ? — 2 with complex digit values may be viewed as a complex number binary code with basic function (1.10) and binary digits. Decomposition of the complex number in the form of corresponds with this code where binary digits are As an illustration, let us write down the codes of some typical numbers using this system: K(2) = 10100, K(-2) = 100, K(-l) = 101, = 10, K(-j) = 1010, K(lj) = 101000. Reviewed further will be coding systems to the complex base, p, where the basic function is /(A «) = m P 1.3. Coding System 2 Let us review the real (positive and negative) numbers, X a and X a (as in System 1), set by the decompositions in (1.7) and the codes in (1.8) to the base, p = -2. Let us build a sequence of alternating digits C m and μ m : Designating a m = dim an( ^ βm ~ σ 2m+l » *^ et us transcribe the above sequence in a different form: ■ σ k+3 σ k+2 σ k+l σ k σ k-l σ k-2 • where k—2m. This sequence is a binary code K(Z)=...σ m ... of a certain complex number, Z = X a + jX β , to the base, p = i J 2. As an illustration, let us write down the codes of some typical numbers using this system, -y 2: K(2) = 10100, K(-2) = 100, ^(-1)= 101, K.{J [Ϊ = 10, K(-j^f2) = l010. 1.4. Coding System 3 Any complex number may be represented within the normal coding system to the complex base, p , and this system is arithmetical if p =(-l±j)«p = ϊe ±iπl1 . To prove this statement, it is sufficient to show that K(2) — \ 100. This relationship is equivalent to the following: In proving it, we should note that p — ~ τ2j and p — ( 2 i 2j). Once these formulae are introduced into the previous equation, it is easy to ascertain its correctness. Thus the conditions of Theorem 1 are satisfied and, consequently, this coding system is arithmetical. As an illustration, let us write down the codes of some typical numbers using the system with the p — j — ) base, designating as p the number conjugated with the number p : K(2) = 1100,1^-2; = 11100, K(-l)= 11101,^ = ll,K(-j) = III, K(p) = 110. 1.5. Coding System 4 Any complex number may be represented within the normal coding system to the complex base, p , and this system is arithmetical if P = (-ι+y ) or p = 2e jψ , where ψ = CircCoS (- 1 /2 /2) . To prove this statement, it is sufficient to show that K(2) =1010. This relationship is equivalent to the following: p + p = 2. In proving it, we should note that p — — I — ■ 3 — J 7 J and P • Once of the preceding formula has been introduced into the equation being proved, it is easy to ascertain its correctness. Thus, the three conditions of the theorem are satisfied and, accordingly, this coding system is arithmetical. As an illustration, let us write down the codes of some typical numbers using this system, denoting as p the number conjugated with the number, p : Kβ)=lOlO, K(-2)=l lO, K(A)=l l l, K(p)=l01, K(-p)=l l lO, κ j ϊ) = loioi, κ{- j ϊ) = 11 loon. FIGURES 1.1, 1.2, 1.3 and 1.4 show the first 4 basic function values in each binary system of coding complex numbers. 2. Arithmetic Operations with Complex Number Codes 2.1. Bitwise Operations Let Zl and Z2 be random complex numbers, Z = Zl delta Z2 (2.1) - the result of operation delta with them, and let the position codes of these complex numbers within the arithmetic system appear as K(Z1) = ...a(k)..., K(Z2) = ...b(k)..., K(Z) = ....sigma(k). Let us consider the class of bitwise operations, i.e. operations of addition, subtraction, multiplication by a constant p -integer coefficient and inversion, i.e. multiplication by '- 1'. The bitwise operation delta is carried out sequentially with each pair of numbers a(k) and b(k) (Jc* h digits of the initial codes) taking into account the carry from low-digit positions using the following formula: S(k) = Q(k) + P(k), (2.2) where Q^ = CC^ Δ β^ is the result of operation Δ with li h digits, p is the carry from the low-digit position to the h digit, S is the resulting digit. The resulting digit can always be represented as S k = σ k + P P k +1 , (2.3) where sigma(k) is the tf h digit of the resulting code, P(k+1) is the carry from the kf h digit to the (k+l) th digit. Obviously, in order not to allow carries from high- to low-order digits, the value of P(k+1) must be a p -integer with any k. Consequently, the values of S^ and O . must also be p - integers. To meet all of these conditions, it is necessary and sufficient for just the Q^ value to be a p -integer. Thus the operation with positional codes is a bitwise one if two conditions are met: • ( k A β k )p * = k p k A β k p k , • Qk is ap -integer. There are two methods of determining the carry values, and thus the bitwise operation may be performed using two different algorithms. 2.2. First Bitwise Operation Algorithm Assume that < S k >= γ m . -7 j -- Ϊ\Y Q , where γ j - digits 0, 1. Then according to (2.3), < Pk+ >= μ m -v- j- 0' ( 2 - 5 ) where JU ,•_*-: — J Using the resulting relationships, we can make a sequence of elementary operations for calculations in the kf h digit: Algorithm 2.1. a k , β k , P k are known quantities. 1. Determine Q k = a k Δ β k . 2. Determine S^ according to (2.2). 3. Determine the code < S^ >. 4. Determine σ k according to (2.4). 5. Determine the code < -t . +1 > of the (2.5) type. 6. Determine ^. +1 by the < P jc+ \ > code. 7. Carry out operations 1 through 6 for the (k+l 1 digit. FIG. 2.1 shows the diagram of computations in the f h digit, and FIG. 2.2 illustrates the pattern of carry distribution per Algorithm 2.1. The resulting form of the algorithm's transcription does not provide a clear understanding of its complexity and specifics, and is inconvenient for practical applications. For this reason it is used only for obtaining another form of recording the algorithm, by constructing a table that describes the bitwise operation within a single digit. This table is complete only if it meets the following two conditions: • if the P f c + ι carry has a certain value, then the P^ carry also assumes the same value; • the table contains any possible combination of values of α k , β^ and P^ . These conditions will be referred to further on as conditions of completeness of the bitwise operations table. Let us review some examples of bitwise operations table synthesis using Algorithm 2.1 and computations performed using these tables. Example 2.1. Code inversion within the system, p = — 1 + j . We have a code, K(L) =... ctfc ... We need to determine the code, K(-Z) =... σ k ... Obviously, Q] c = αj c . Using Algorithm 2.1, we compile Table 2.1, which satisfies the conditions of completeness: carries P. and ^ +1 assume values from the overall five-element set, P={ 0, 1, /, -1, 1+ } and the table contains all possible number pairs, one of which belongs to the {0, 1 } set and the other to the P set. Using Table 2.1 we can easily invert any code of this system. An example is provided in Table 2.1 A. Table 2.1. Table 2.1A. Carries i+L 0 0 i+L Code 0 0 0 0 Result 0 0 0 Example 2.2. Addition of codes in System 4. In this case Q k ^ d^ +β^ assumes three values: {0, 1, 2}. Using Algorithm 2.1, we compile Table 2.2, which describes the process of addition. In order to reduce its size: • no oij; and β k digit combinations adding up to Q were entered; • the value of S/ c was not given and only the < S > code was entered; • the < S k > code was recorded in the cell located at the crossing of column Q k and line P k (e.g. if Q k =\ and P k = p, the code is < S k =l+ρ >=101). This table satisfies the conditions of completeness since it contains all possible combinations of values of Q k and P k , and the <P k > code assumes the same values as the <P k+ \> code, which consists of higher-order digits of the <S k > code (e.g. if <S^.>=1110, the code is <E +1 >=111, but the <Jk>=lll code is also represented in the table). An example is provided in Table 2.2A. Table 2.2. Table 2.2A. Example 2.3. Subtraction of codes in System 4. In this case Q^ — CC^ — ^ assumes these values: {0, -1,-2}. Using Algorithm 2.1 we compile Table 2.3, which describes the process of subtraction. Table 2.3. Example 2.4. Inversion of codes in System 4. In this case Q^ — ~O jζ assumes two values: {0, -1}. Using Algorithm 2.1 we compile Table 2.4, which describes the process of inversion. Table 2.4. Example 2.5. Algebraic addition of codes in Systems 1 and 2. Note that in these systems K(λ) = 10100, K(-2) = 100 and K( ) = 101. Taking into account the method of coding in these systems and the type of codes used, we can observe that algebraic addition in these systems is performed according to the rules of algebraic addition in the coding system of real numbers to the base of p = -2, where K(2) = 110, K(-2) = 10 and K(- 1) = 11. In case of reverse addition, Q^ = — C ^ — β^ assumes these values: {0, -1,-2}. Using Algorithm 2.1, we compile Table 2.5, which describes the process of reverse addition. Particularly, Q^ = —OCfc , when inverted, assumes two values: {0, -1}. In Table 2.5 the part having to do with inversion was specially marked. Based on Table 2.5, we compiled the truth Table 2.5A of single-digit circuits for reverse addition of codes in this system. The part having to do with inversion has also been specially marked in it. FIG. 2.3 illustrates the pattern of carry distribution within the single-digit complex code circuits in this system. Table 2.5. Table 2.5A. 2.3. Second Bitwise Operation Algorithm Unlike with Algorithm 2.1, let us base ourselves on the representation of S k as S k = P m iΛ-m + • • • +/> *+/ + ■ • .+/"7*+i + σ* , (2 - 6) where CF^ is the &" ! digit of the resulting code, T jc+ • is the partial carry from the Ic* digit to the (k+j) th , m is the maximum number of partial carries. Obviously, with this structure of S k , the carry, P , to the li h digit consists of m partial * carries generated in m low-order digits with numbers from (k-m) to (k-1). Thus, In order for P k to equal p -integers, the partial carries must also be p -integers. There are no further limitations as to the numbers μ u and η k+j , so that in the general case they may differ from numbers {0,1 } . Let us name an expression of the type, « S k » = k+m --- k+r k+ k , the resulting digit quasicode, and the expression of the type, « P k » = η k+m ~.η k+f ..η k+v the quasicode of the carry from the kf digit. Using the resulting relationships, we can compile the sequence of elementary operations for calculations in the li h digit: Algorithm 2.2. k , β k , μ are known quantities. 1. Determination of Q k * = ** a k A β k . 2. Determination of P k according to (2.7). 3. Determination of S k according to (2.2). 4. Determination of the « S k » quasicode. 5. Determination of σ k from the « S k » quasicode. 6. Determination of the « P k+ » quasicode, i.e. the partial carries from the li h digit. 7. Operations 1 through 6 for the (k+l) digit are carried out. FIG. 2.4 illustrates the computation circuit in the &-digit, and FIGURES 2.6 and 2.7 illustrate the pattern of carry distribution in Algorithm 2.2. These figures show: N(k+j) = η k+ j, M(k,j) - μ Algorithm 2.2 for this bitwise operation in this coding system may have several versions due to the availability of several quasicodes for the resulting digit, S . In particular, the quasicode may coincide with the positional code if the meanings of partial carries are selected from the {0, 1 } set. In a general case, the different quasicode digits acquire values from sets that differ from this one not only by their element values, but also by the cardinal number (the number of elements). The sequence of operations in Algorithm 2.2 is used to synthesize bitwise operation tables that meet the conditions of completeness, which in this case are formulated somewhat differently: • theP k carry acquires all possible values that correspond with any combination of Ηk+j > • any possible combination of the numbers, a k , β k , P k , is present in the table. Obviously, Algorithm 2.2 having several versions, it is possible to compile several types of tables for this bitwise operation in this coding system. Let us review some examples of synthesis of bitwise operation tables using Algorithm 2.2, and calculations using the resulting tables. Example 2.6. Addition of codes in the system, p — j ' — 1. In order to describe this operation, let us compile, using Algorithm 2.2, a short Table 2.6 containing only the value of *S& and the «Sj c » quasicode, all digits of which acquire the value of 0 or 1. In this case the quasicode coincides with the positional code, but two of its digits always have a zero value. Consequently, not more than six partial carries equal to 1 are generated in the li h digit. This means that not more than six partial carries may enter the k* 1 digit either, i.e. 0 < P k ≤ 6 . Since 0 ≤ Q k ≤ 2 on addition of these codes, then 0 < S k ≤ 8 . All 8 values of S k are represented in Table 2.6, and therefore it meets the condition of completeness. To illustrate the existence of several versions of Algorithm 2.2, let us compile two more Tables, 2.6A and 2.6B, which will describe addition in this system. In these tables, the number, a, stands for the value of '-1 '. It follows from Table 2.6A that three partial carries may enter the k 1 ' 1 digit simultaneously (a partial carry that always equals zero is not considered here): 0≤μ kl ≤l, 0<μ a ≤l, -l≤μ B ≤l, consequently, -l ≤ P ≤ 3 , whence -1 < S/ C < 5. Thus Table 2.6A is complete. The completeness of Table 2.6B is proved in a similar way. The choice of one or another version of Algorithm 2.2 is determined by the minimum number of values acquired by the P k carry. From this viewpoint, Table 2.5 is not as good as Tables 2.6A and 2.6B. Table 2.6C shows an example of addition using Table 2.6B. Table 2.6. Table 2.6A. Table 2.6B. Table 2.6C. Example 2.7. Reverse addition of codes in the p = j — 1 system. Similarly to the preceding example, let us compile a short Table 2.7 containing only the value of Sjr and the «Sfc» quasicode, all digits of which acquire the value of 0 or 1. In this case the quasicode coincides with the positional code, but one of its digits always has a zero value. Consequently, not more than three partial carries that equal 1 are generated in the k 11 ' digit. This means that not more than three partial carries may enter the ii 1 digit either, i.e. 0 < Pfc ≤ 3. Since — 2 ≤ Q . < 0 with reverse addition of these codes, then — 2 ≤. Sfc ≤Ξ 3. All 6 values of AJ^ are represented in Table 2.7, and therefore it satisfies the conditions of completeness. The part of Table 2.7 that has to do with code inversion in this system was specially marked. Truth Table 2.7 A of single-digit circuits for reverse addition of codes in this system was compiled based on Table 2.7. The part of it that is the truth table for inversion was specially marked. FIG. 2.6 illustrates the pattern of carry distribution in single-digit circuits. Table 2.7. Table 2.7A Example 2.8. Reverse addition of codes in System 4. Similarly to the preceding example, let us compile an abridged Table 2.8 containing only the value of Sjr and the « S k » quasicode, all digits of which acqujire the value of 0 or 1. In this case the quasicode coincides with the positional code. Not more than three partial carries equal to 1 are generated in the k"' digit. This means that not more than three partial carries may enter the Ji h digit either, i.e. 0 ≤ P^ ≤. 3. Since — 2 ≤ Q . ≤ 0 with reverse addition of these codes, then — 2 ≤. S^ ≤Ξ 3. All 6 values of Ufa are represented in Table 2.8, and therefore it satisfies the conditions of completeness. The part of Table 2.8 that has to do with code inversion in the system was specially marked. Truth Table 2.8 A of single-digit circuits for reverse addition of codes in this system was compiled based on Table 2.8. The part of it that is the truth table for inversion was specially marked. FIG. 2.7 illustrates the pattern of carry distribution in single-digit circuits. Table 2.8. Table 2.8A 2.4. Coding and Decoding of Complex Numbers An encoded complex number is represented as Z = X a + jX a, where X a , Xa are real and imaginary parts of the complex number that are real (positive or negative) numbers. There are known and existing decompositions for these numbers, to the base ofp = -2 of the (1.7) type, and positional codes to the base of p = -2 of the (1.8) type. In the above-mentioned coding systems, the imaginary unit may be represented as follows: J = J ' CO , where μ is a real number and ω is a complex number that has a short code within this system. Thus the encoded complex number is represented as Z = X a + CO - X a , where X a = JU • X g . Table 2.9 shows these numbers as well as codes for all the coding systems described above. Table 2.9. In a general case, there is Algorithm 2.4. Coding 1. Computation Xo = JU • X o within the traditional binary coding system. 2. Representation of real (positive or negative) numbers X a - > X β as X — ∑ O m — 2 ) , OC m — j 0,1 in the coding system to the base of ( ) P = —∑ (this is a known algorithm, and it will not be described here). 3. Coding of the real numbers, X a , X β , into this complex number coding system by computation using the preceding formula, where the number codes ( — 2 ) are determined beforehand (e.g. by sequential multiplication by (-2)). 4. Calculation using the formula, Z = X a + CO • X β , within this complex number coding system, where the code, K(ω), is known - see Table 2.9. In a general case, there is Algorithm 2.5. Decoding 1. Isolation of complex codes of the real and imaginary parts, X a , X , from the complex number Z = X a + ]X β - 2. Decoding of real (positive and negative) numbers, X a r) X β -, i nto the coding system to the base, p = —2 , i.e. computation of the O m — { 0,lj digits for decomposition of th X = Ot ( — 2 ) type. This computation involves (m) sequential subtraction of the numbers, ( — 2 J , from the decoded number. And if the next subtraction reduces the residual absolute value, then(X m = 1. Otherwise CC m = 0 , the exponent m is reduced by 1, and so on. 3. Decoding of real (positive and negative) numbers X a , X β from the coding system to the base p = —2 into the traditional binary coding system (this is a known algorithm, and it will not be described here). For some systems, these common algorithms are substantially simplified. These are reviewed next. Algorithm 2.6. Coding in System 1 1. Representation of real (positive and negative) numbers X a , X β within the coding system to the base of p = —2 in the form of codes shown in (1.8) (this is a known algorithm, and it will not be described here). 2. Formation of the code, Z ) = '-'βm m '''βl a \β a ^ β-i a -lβ-2 a -2''^ 2 ^ of the complex number, Z = X a + jX β , which is later represented as K(Z) = ..γ m ..., (2.9) Algorithm 2.7. Decoding in System 1 1. Obtaining even and odd digits from the code (2.9) of the complex number, \ a ml2 = ϊm if m - eVen Z = Λ „ + jX β , according to the rule. 2. Formation out of the digits O m and β m of the codes (1.8) to the base p = —∑ for numbers X a , β , respectively. 3. Decoding of real (positive and negative) numbers X a , X β from the coding system to the base p = —2 into the traditional binary coding system (this is a known algorithm, and it will not be described here). Algorithm 2.8. Coding in System 2, where p 1. Calculation ofZo = JU • X β , where JU ■ —--- ■* /■ « -/ [, —X- T Tthiiios jg carried out in the traditional binary coding system. 2. Representation of real (positive and negative) numbers X a , X β in the coding system to the base p = —2 as codes (1.8) (this is a known algorithm, and it will not be described here). 3. Formation of the code (2.8) of the complex number, Z = X a + jXβ, which is later represented in the form of the code (2.9). Algorithm 2.9. Decoding in System 2, where p = j / 2 . 1. Obtaining even and odd digits from the code (2.9) of the complex number, Z = X rule. 2. Formation, from the digits C m and β m of the codes (1.8) to the base p = —2 for numbers X a , Xβ , respectively, where Xβ = JU • X , and JU = y πr . 3. Decoding of real (positive or negative) numbers X a , Xβ from the coding system to the base p = —2 into the traditional binary coding system (this is a known algorithm, and it will not be described here). 4. Calculation oϊX β = This calculation is carried out in the traditional binary coding system. 2.5. Multiplication of Complex Numbers It is necessary to find the product of complex numbers, Z — V W, where the cofactors are decomposed as follows: The product code is determined as Z = 2 J VW^J [ p , H I . Multiplication by the basic function, j [ p, h I , is equal to the h digits shift for any . basic function. Since W^ — "( 0,1 !- , the multiplication of codes within the arithmetic system is reduced to additions and shifts performed in sequence. Let us note the differences from the traditional real numbers multiplication system: • Operations with signs are absent, • Addition is performed in the complex number codes adder, • Shifting is performed in the complex number codes shifter, • At each stage of addition and shifting, the respective operation is performed on the complex number as a whole (without identifying the real and imaginary parts). FIG. 2.8 shows a traditional consecutive multiplication circuit, which is also applicable to the multiplication of complex numbers C=A*B. At the start of multiplication the multiplier, A, is written into the RegA register, the multiplicand, B, - into the RegB register, while a «0» is written into the partial product register, RegQ. At each step: • m of the RegB junior digits is analyzed; let us denote the complex value of these digits as M; • the complex code of the number, S = M * RegA + RegQ, is calculated in the Sum adder; • the complex code, S, from the Sum adder output is written through the ShiftRight- 1 shifter into RegC with a shift of m digits to the right; • from RegC the code is forwarded to RegQ; • the complex code from the RegB register is written through the ShiftRight-2 shifter into RegW with a shift of m digits to the right; • from RegW the code is forwarded to RegB. The number of m being analyzed at each step of the digits determines the multiplication performance speed and the adder's complexity. For instance, in systems 1 and 2, where m = 2, the number, M— {1,0,-1,-2}, and the adder must perform the addition, subtraction and the subtraction of a doubled number. For complex code C=A*B multiplication, in addition to the consecutive circuit reviewed above, a matrix-based multiplication circuit can be used - see FIG. 2.9. This circuit contains RegA, RegB and RegC registers as well as an MM matrix multiplier that consists of a multitude of adders, Add(K). The first inputs of all adders are connected to the RegA register output. The RegB register's K-digit output is connected to the controlling input of each Add(K) adder. The output of each adder (except for Add(N)) is connected to the input of the following adder with a shift by 1 digit. The output of the Add(N) adder is connected to the input of the RegC register. At the start of multiplication, the multiplier, A, is written into the RegA register, while the multiplicand, B, - into the RegB register. If the K-digit of the RegB register equals «1», then the Add(K) adder adds the complex code, A, to the preceding adder's output code shifted by 1 digit. If the K-digit of the RegB register equals «0», then the Add(K) adder transmits further the output code of the preceding adder shifted by 1 digit. Thus formed at the input of the Add(N) adder is the complex code of the result, which is written into the RegC register. 3. Division and Computation of Elementary Functions of a Complex Variable 3.1. "Digit by Digit" Method Computation of elementary functions is performed using the "digit by digit" method. As demonstrated below, it can be generalized to complex number codes. Suppose that Z is a random complex number. Let us consider the sequence of complex numbers, Z n ( h = 1, ... , Tflj : \ > ^2 -> * ^3 ' • • ' J h '> ^h+l > "' ^m -x and the sequence of complex codes, K[ Z — : K(Z - ...K(Z- Z h ), ...K(Z - Z m ) . Let us suppose that the complex number code has a certain characteristic, further referred to as code size. We shall express this code characteristic of the complex number, Z, by the symbol, The highest significant disit number or the modulus of the encoded number can be used as code size. Let us consider the sequence of sizes, NKiZ — Z^ . NK(Z - Z λ ), NK(Z - Z 2 ), ...NK(Z - Z h ), ...NK(Z - Z m ) We will refer to the numbers sequence, Z n , as the generating sequence, Z n j , if with a random h = 1, ... , m the following condition is satisfied: NK{Z-Z M )<NK{Z-Z h ) 3.1) The numbers Z n are formed in such a manner as to satisfy the recurrent condition: where Q,^ — 0, 1, 2,...J j £? is the basis of the encoding system. The expression, P , will be further used to express the basic function, J [p, h\, which (as shown h above) does not always equal the value of p . Considering 3-1) and 3-2) simultaneously, we find that: Z-Φ(z h9 ε h+l , p h+l )]≤ NK[Z - 3.3) Let us denote NK(Z-Z m ) = H(m). 3.4) 3.2. Decomposition Let us proceed to describing the Z m calculation algorithm, for which purpose we have first to consider the transition process from Z n to Z^ + \. The h generator of Z^ is known. In order to determine the (h+1) generator of Z^ + we must find the maximum value, / j+ - [ , at which Zfo +X calculated using formula 3-2) will still satisfy condition 3- 1). Obviously, = 1. The value, - ^ +1 =Φ Z^, 1, , should be tested to see if it satisfies condition 3-1). The test consists in comparing the code values of numbers Z — Z n j and Z ' J . There are three possible options in this comparison: = 1 b) NK Z -- Z 7 h(+l > NK\ Z — Zfo \ - this inequality indicates that lfo+i — 0 and J h+l = z h > z) NK Z - Z h+l NK\ Z — Zfo - this inequality indicates that l^ + -≥ 1 and values should be tested for satisfying condition 3-1). This test is carried out in a similar way by comparing the codes of numbers I Z — and I Z — Z I . The test results either in the determination of the values of = 2 and Z J hz, ^ +ι\ = Z. . Of Z/. +j = Z, ^ , or in the transition to code inquiry of numbers h+l h+l Consequently, as a result of the consistent use of testing with respect to code values of I Z - Z) * ' and where JU = 0, 1, 2, ... β/- +1 , the value, ^- +j = , is determined based on the known value Z^ . Obviously, the calculation process of the (h + l) generator by the known h generator may be initiated from the first Z j generator and finished with the Jfl generator of Z m . The algorithm describing the h calculation cycle of Z m looks like this: Algorithm 3.1 The previous generator Z n ^ ' = Z -^p pr r e e v v (μ = 0,1,2, ...j and the difference F prev — 7 — 7 prev are known. 1. The next expected generator, Z ^ ' = Z neχt , is determined using the formula 1 Λ A+ next J rev ■ P ll J 3.5) 2. Calculate the difference, E neχt = Z — Z neχt . 3. Compare values H prev = and H neχt = NK(E neχt ) . Then, according to the comparison results of prev and neχt : A. Determine the number of the next cycle h ' . 5. Determine the value of the previous generator, Z' ev , for the next cycle. 6. Determine the difference Z — Z' ev for the next cycle. The last three items are to be carried out according to Table 3.1. 7. Examine the fulfillment of the condition, neχt = H( ri) : if this equality is th satisfied, it indicates that the Jfl generator has been found for Z m , i.e. the calculation is finished; if it is not satisfied, then the h' calculation cycle is carried out. Table 3.1. It should be noted that several cycles may have the same number (where dfo+i > 1 ), so that the number of cycles Ω may exceed the number of generators Jfl. Thus the generating sequence Z- is calculated using Algorithm 3.1. This algorithm contains only the basic computer operations of addition, subtraction and value comparisons, so that it is easily implemented in an arithmetic device. The sequence of basic operations of Algorithm 3.1 is more clearly described in FIG 3.1 Henceforth we will refer to the calculation of a generating sequence as decompositing, i.e. presentation of a complex number as the sum or product of other known numbers, which are elements of decomposition. We will refer to such representation as decomposition. Each potential element of decomposition may be absent in a specific decomposition or be present in it, recurring Ct n times. The sequence of nuinbers d n is a result of decompositing. Table 3.2 lists types of decompositing used below, and their general properties. Table 3.2 3.3 Compositing As stated earlier, the result of decompositing is the U^ sequence of numbers. Obviously, it is possible to restore the number that was decomposited from this sequence. We are going to refer to this calculation as compositing. This operation is the opposite of decompositing and consists in calculating a complex number as a sum or product of certain other known numbers that are elements of decomposition. In this context such representation of a number will be called composition. It should also be noted that in the process of composition the elements of decomposition may be converted or substituted by other elements. That is the essence of composition and we will use this method later on. Table 3.3 shows types of composition. Every potential element of decomposition may be absent in a particular decomposition or be present in it recurring Q,^ times. Table 3.3. Table 3.4. oe 3.4. Two-step Operations Let us now consider a certain function, W — f(Z) . If the generating sequence Z n j for the number Z is known, then the generating sequence W n j of the number J^can be calculated, since W^ = f(Z jj ) . Specifically, the previous generator, Wprev = f ( Z prev ) > mά ^ next generator, W mχt = f (Z neχt ) , or taking * into account the formula, 3.5), w r ' next = / Φ z prev i, P h+1 ]} 3.6) It is often possible to represent the expression, 3.6), as follows: nex 1 1, p > t ' prev ' 3.7) The computation of basic functions W — f(Z) in this manner consists of two steps: decomposition of the number, Z, and composition of the number, W. These functions are listed in Table 3.4. The same information is represented differently in Table 3.5. Further, the operations described in these tables will be reviewed in more detail. Two-step operations for complex numbers represented in the floating-point form will be reviewed at the same time, specifically in the form of Z = (-2) k - M 3.8) where M is the mantissa, a complex number code, k is the order, a real number code to the base of (-2). Table 3.5. 3.5. Computational Algorithms 3.5.1. Division of Complex Numbers Division of complex numbers τ V, = — Y consists of two operations: 1. Determination of the W = complex number; henceforth we will refer to this M operation as inversion of the complex number, M; 2. Multiplication V = (- 2) Y ' W. The inversion algorithm of the complex number, M, involves the following: 3. Decompositing using the 1 ■ = ∑ β^ V^ O formula, where k=h-l yh ~ Σ a kyk and V 0 = ("DecompDivis"). k=0 A. Compositing using the W — ∑ a h p formula ("CompDivis"). 3.5.2. Determination of the Natural Logarithm of a complex number (Option 1). The algorithm of determination of the natural logarithm of a complex number is as follows: . Decompositing using the M = 1 1 + p J formula ("DecompBinom"). 2. Compositing using the ln( ) = W = ∑ a h ln( 1 + p I formula ("CompLogar"). 3. Computation of ln(Z) = [k • ln(-2) + ln( )] . Here ln(- 2) = ln(-l) + ln(2) or ln(- 2) = jπ + ln(2) 3.9) Thus ln(Z) = k - ln(2) + w + kjπ = ReZ + ImZ, where ReZ = k ■ ln(2) + Re w, ImZ = kjπ + Im . 4. Determination of the natural logarithm's principal value. Its imaginary part is within the — 71 ≤ ImZ ≤ K range., therefore the imaginary part of the principal value is determined by the formula: 5. Result normalization. 3.5.3. Determination of the Natural Logarithm of a complex number (Option 2). The algorithm of determination of the natural logarithm of a complex number is as follows: 1. Decompositing using the formula ("DecompBinom2"). 2. Compositing using the ln( ) = W = 2 • ∑ ύ h llil 1 + p I formula (^CompLogar"). Then proceed with items 3-5 of the algorithm in Section 3.5.2. 3.5.4. Computation of Complex Number Modulus Logarithm Computation of the algorithm of the complex number modulus differs from the algorithm of taking the log in Section 3.5.2 only in that instead of the "CompLogar" composition, "CompLogarModul" is used: 3.5.5. Computation of Complex Number Argument (Option 1) The computation algorithm of the complex number argument differs from the algorithm of log taking in Section 3.5.2 only in that instead of the "CompLogar" composition, "CompLogar Angle" is used: 3.5.6. Complex Number Square-rooting The complex number square-rooting algorithm is as follows: 1. Reduction of the given number to Z = (-2) 2m ' d - M if k - even, then 2m=k, d=l, b=0 ifk - odd, then 2m-k-l, d=-2, b=l 3.11) 2. Decompositing using the formula ("DecompBinom2") . 3. Compositing using the lll( M) — W — Λ/ α [ ( 1 + p j formula ("CompBinomA"). A. Result formation N Z = (— 2) ln( M) . 5. Result normalization. 3.5.7. Computation of Complex Number Argument (Option 2) The computation algorithm of the complex number argument is as follows: 1. Reduction of the given number to the form shown in 3.11 ) . 2. Decompositing using the M — Y 1 + P I formula ("DecompBinom2"). 3. Compositing using the ln(- ) = W = -2j • Im∑ a h ln( 1 + P ) formula ("CompLogar Angle"). A. Computation of arg(Z) = Im(ln(Z)) = Im[(& + b) • ln(-2) + ln( M)] . taking into account item 3.9), we obtain arg(Z) = ln( M) + (k + b)j π . 5. Determination of the principal value of the argument according to 3.10). 6. Result normalization. 3.5.8. Conjugated Number Square-rooting Conjugated complex number square-rooting algorithm differs from the complex number square-rooting algorithm only in that instead of the "CompBinom" composition, "CompBinomConjug" is used: 3.5.9. Computation of Complex Number Modulus The complex number modulus computation algorithm differs from the complex number square-rooting algorithm only in that instead of the "CompBinomModul" composition, "CompBinom" is used: 3.5.10. Complex Number Exponentiation The task of complex number exponentiation involves determination of the Z — e number in a complex power, X = (— 2) m, where WI is the mantissa and p is the order. Bearing in mind 3.9), convert this number : X = R ' βX + jJmX = x' + βH-2) + jJmX = π. = x' + βln(-2) + j(x" + μ-) = = x' + /Jln(2) + jβπ + j(x" + μ ~ ) = = βln(2) + j^(2β + μ) + (x' + jx"). Thus RQX = βln(2) + x jlmX = j(-(2β + μ) + x"). Within these relationships, β- integer, (2β + μ) - integer, x' - fraction, x" - fraction. It should be noted that And it follows that { _ 2) β e y e X where y ~ ( ' + jx") and γ = (2β + μ) . Here where 7 is the residue of division of the integer γ by 4. The exponentiation algorithm is as follows: 1. We are given the number, X = f — 2 J YYl , where m is the mantissa and ? is the order. 2. If X = 0, then Z = l . vι ReX ImX 3. Computation of X = , JL = ; — . ln(2) π/2 A. Extraction of integers β, γ and fractions x' , x" from numbers X X" , respectively. 5. y = x' + jx") number decompositing using the y = ∑ a n lnl 1 + p I formula ("DecompLogar"). 6. Compositing using the W = JJ 11 + p J formula ("CompBinom"). 7. Determination of exp(X) = (-2)^ • ^ • W 8. Result normalization. 3.5.11. Transformation of Polar Coordinates into Rectangular Ones Transformation of polar coordinates into rectangular ones involves computation using the Z = - e jφ = Z - l l + p I formula, where (|Z|, φ are polar coordinates, real numbers. The algorithm of this transformation differs from the algorithm of complex number exponentiation shown in section 3.5.10 only in that instead of the "CompBinom" composition, "CompBinomA" is used: A6 3.5.12. Transition of Polar Coordinates to Rectangular Ones Transformation of polar coordinates into rectangular ones is equivalent to complex number argument and modulus computation. The corresponding algorithm is as follows: 1. Reduction of the given number to the form shown in 3.11). formula ("DecompBinom2"). 3. Compositing using the W a = ~2j • Ittl∑ α/- l + p ~ J formula (" CompLogar ngle"). 4. Compositing using the W m = formula ("CompBinomModul"). 5. Result formation in the form of Z = 2 rr wr . 6. Computation of arg(Z) = Im(ln(Z)) = Im[ k • ln(-2) + ln( - )] . Bearing in mind 3.9), we determine arg(Z) = Im(m( M)) + kjπ . 7. Determination of the main argument value according to 3.10). 8. Result normalization. 4. Processor Design The processor has a traditional structure. The differences are in the data representation, in the structure of the microprogrammed operation control unit of the arithmetic device, and in the design of some operational units of the arithmetic device. 4.1. Data Representation Complex numbers are represented in the floating point form, specifically as Z = (-2) k - M, where - is the mantissa, a complex number, k is the order, a real (positive or negative) number. The complex number, M, is represented by code in one of the 4 numerical systems mentioned above. This code has double the digit capacity of the traditional real number code with this relative coding accuracy. The order, k, is represented by a real number code to the base of (-2). 4.2. Microprogrammed Control Unit The microprogrammed control unit of the arithmetic device performs the above operations - arithmetic, encoding, decoding and computation of elementary functions. During the microprogram execution, different operational units of the arithmetic device are addressed. Common operational units (such as the multiplexer, register, shifter, etc.) and specialized ones needed for operations with complex number codes are identified among them. The latter are described below. 4.3. Operational Units 4.3.1. Comparison Unit of Low-digit Complex Codes by the Modulus This unit compares two G-digit complex codes by the modulus. Before this unit is built, a modulus table (Table 4.1) is compiled for it. This table lists all G-digit C^ combinations and the code modulus, M.^ , represented by each i combination. The M^ modulus is calculated using the formula, . Next, the product of two such tables is found and as a result the unit truth table (Table 4.2) is compiled. This table lists all G combination pairs of C^ digits of the first code and β^ digits of the second code. Moduli - j - and M m are designated for each respective pair, as well as the comparison result of these moduli - the C code. Thus the table describes the function, C = ψ({ ( X k } j {β k }) • The unit fulfills this table- see FIG. 4.1, where: Alfa is the input G of C ^. digits, Beta is the input G of β k digits, C is the resulting function. Table 4.1 Table 4.2 4.3.2. Unequal High-order Digit Number Comparison Unit This unit makes the unequal high-order digit number (UHDN) value comparison. FIG. 4.2 shows an interconnection diagram of single-digit units with one another and with code registers A and B being compared. The truth table (Table 4.3) describes the operation of the single-digit unit using the following designations: C(k) - k-digit unit, A(k) ,B(k) - k-digits of codes being compared, VI, V2 - input carries, WI, W2 - output carries. Carry codes (W2, WI) are interpreted as follows: 00 — codes are compared by the UHDN, 01 - A > B by the UHDN, 10 - A < B by the UHDN. Table 4.3 4.3.3. Comparison Unit of Multidigit Complex Codes by the Modulus This unit is shown in FIG. 4.3. The codes being compared are connected to the UHDN comparison unit, which is described above in Section 4.3.2. At its output, the unequal high-order digit number (UHDN) is generated, which equals N. This number is the keying signal for the multiplexer and opens its Λ^-input. Two groups of code digits being compared, same-name by G and aligned in succession, are connected to each of these inputs. The high-order digit number in the group equals N. Thus two groups of high-order digits of the compared codes are generated at the multiplexer's output. They are fed into the comparator input of two G-digit code moduli. The latter is described above in Section 4.3.1. 4.3.4. Algebraic Adder of M-codes The algebraic adder is described in FIG. 4.4, where Inverterl - the first doubler inverter, Inverter2 - the second doubler inverter, Adder - the inverse adder, A - the n-digit input of the first summand, B - the n-digit input of the second summand, C - the n-digit adder output, /l J 2 " inversion codes of doubler inverters Inl and In2. Algebraic adder functions as follows. The summand code is converted in the doubler inverters using the formula, A = Cf ' A, Cf = —1,0,1. The converted summands are added in the adders using the formula, C — —A — B . Thus the algebraic adder calculates C = ( — C[γ • A — < ' -" ) • Inverter and inverse adder designs for all complex number encoding systems are described above. DESCRIPTION OF PREFERRED EMBODIMENT In the following description, numerous specific details are set forth to provide a thorough understanding of the invention. However, well-known circuits, structures and techniques have not been shown in detail in order not to obscure the invention. According to one aspect of the invention, a method and apparatus for representing and storing complex number data under coding systems which allow efficient arithmetic operations to be performed and for performing such is described. In one embodiment of the invention, complex number data is coded in a manner which allows the data to be stored and manipulated using one data element for both the real and imaginary parts of the complex number rather than two separate data elements. According to another aspect of the invention, a data processing system generally having a CPU, DRAM, a bus, a PCI bridge, and a complex number coprocessor is described. According to another aspect of the invention, the complex number coprocessor component of the data processing system has stored therein data representing sequences of instructions which, when combined with certain unique circuitry also contained therein and executed, cause the coprocessor to perform the above described method and to perform complex number arithmetic operations. The term data processing system is used herein to refer to any machine for processing data, including the computer system(s) described herein. Referring to FIG. 1, there is shown a block diagram of an exemplary data processing system 10 according to one embodiment of the invention. The data processing system 10 includes a central processing unit or CPU 20, a storage device such as dynamic random access memory or DRAM 30, a CPU bus 40, a PCI bridge 50, and a complex number coprocessor 60. The coprocessor includes a control unit 70 and an arithmetic unit 80. The CPU 20, DRAM, and coprocessor 60 are coupled by the PCI bridge 50. In addition, a number of user input/output devices, such as a keyboard and a display, may also be coupled to the bus 40. The CPU 20 represents a central processing unit of any type of architecture, such as a CISC, RISC, NLIW, or hybrid architecture. In addition, the CPU 20 could be implemented on one or more chips or circuit boards. The DRAM 30 represents only one or several possible mechanisms for storing data. Other possible storage devices may include read only memory (ROM), random access memory (RAM), magnetic disk storage mediums, optical storage mediums, flash memory devices, and/or other machine- readable mediums. The bus 40 represents one or more busses (e.g., PCI, ISA, X-Bus, EISA, VESA, etc.) and bridges (also termed as bus controllers). While this embodiment is described in relation to CPU and coprocessor computer system (i.e. a multiprocessor computer system), the invention could be implemented in a single processor computer system. In addition, while this embodiment is described in relation to a 64-bit computer system, the invention is not limited to a 64-bit computer system. Of course, the coprocessor 60 contains additional circuitry not shown, which is not essential for understanding the invention. Referring to FIG. 2, there is shown a block diagram of the arithmetic unit 80 of the exemplary complex number coprocessor 60. The arithmetic unit has a control unit 90, an arithmetic unit for mantissas 100, an arithmetic unit for exponents 110, read-only memory or ROM 120, mantissa registers 130, exponent registers 140, an internal bus 150, bus interface registers 160, accumulators 170, encoders 180, decoders 190, and an exponent to mantissa mover 200. The registers 130 and 140 contain information including control/status data, integer data, floating point data, and complex number data stored in one or more of the codes described herein. The ROM 120 contains the software instructions necessary for performing any and/or all of the method steps described herein. Of course, the ROM 120 preferably contains additional software, which may be associated with various arithmetic operations, which is not necessary for understanding the invention. The software contained in ROM 120 is executed by the any and/or all of the confrol unit 90, mantissa unit 100, and exponent unit 110. The control unit 90, encoders 180, decoders 190, accumulators 170, exponent to mantissa mover 200, mantissa unit 100, and exponent unit 110 may be implemented using any number of different mechanisms (e.g., a look-up table, a hardware implementation, a PLA, etc.). While the method and corresponding software instructions described herein may be represented by a series of if/then statements, it is understood that the execution of an instruction does not require a serial processing of these if/then statements. Rather, any mechanism for logically performing this if/then processing is considered to be within the scope of the implementation of the invention. Of course, the arithemetic unit 80 contains additional circuitry, which is not necessary for understanding the invention. Referring to FIG. 6, there is shown the encoding method steps according to one embodiment of the invention. In response to receiving an instruction from the CPU 20, two data elements representing the real and imaginary parts of a complex number 610 are read by the coprocessor 60 from the CPU 20 and/or DRAM 30. These two elements are then used to generate a single code for the complex number which is stored as a single data element. As a result of this coding, arithmetic operations on complex numbers may be performed on a single data element which contains both real and imaginary data. This results in more efficient complex arithmetic operations. In step 610, the complex number Z, consists of a real part Xa and an imaginary part Xb, is read by the coprocessor 60 such that Z = Xa + j Xb, where Xa and Xb are real numbers (positive or negative) in base 2 and where j = (-l) Λ (l/2). The data elements representing Xa and Xb may be stored and read from the coprocessor's 60 registers 130 and 140 during encoding and decoding method described herein. In step 620, the value of Xb is scaled by a variable u, in base 2, such that Xb = u * Xb. The value of variable u is determined by the particular coding system that may be used. The data elements corresponding to different values of u maybe stored in the coprocessor's 60 ROM 120. The various coding systems and the definition of the variable u are described later in conjunction with FIG. 12. At step 630, the binary code of Xa is converted from base 2 to base -2 and may be represented by the symbol K(Xa) 650 such that K(Xa) = ...a(m)...a(2), a(l), a(0), a(-l), a(-2)..., where m is the mth digit in the code, a(m) = {0,1}, and Xa in base -2 is given by Xa = Sum(m) [ a(m) * (-2) Λ m]. At step 640, the binary code of Xb is also converted from base 2 to base -2 and may be represented by the symbol K(Xb) 660 such that K(Xb) = ...b(m)...b(2), b(l), b(0), b(-l), b(-2)..., where m is the mth digit in the code, b(m) = {0,1}, and Xb in base -2 is given by Xb = Sum(m) [ b(m) * (-2) Λ m]. At step 670, the binary code K(Z) 680 is composed for the complex number Z by interlaying the binary codes K(Xa) and K(Xb) such that K(Z) = ...b(m), a(m)...b(2), a(2), b(l), a(l), b(0), a(0), b(-l), a(-l), b(-2), a(-2)... or, K(Z) = ...y(2m+l), y(2m)...y(m)...y(2), y(l), y(0), y(-l), y(-2)..., where y(2m) = a(m) for even m and y(2m+l) = b(m) for odd m. Note that one my write Z = Sum (2m) [y(m) * f(p,m)], where y(m) = a(m) for even m and y(m) = b(m) for odd m. The data element representing K(Z) may be stored and read from the coprocessor 's 60 registers 130 and 140 during the encoding and decoding method described herein. FIG. 12 lists six (6) exemplary coding systems 1250, 1260, 1270, 1280, 1290, and 1300 that may be used. Each coding system is designated symbolically by the function f(p, m) 1210, where m is the mth digit in the resulting code for the complex number and where p 1210 is the coding base which has associated with it the variables u 1220 and w 1230, where u is a real number and w is a complex number such that u * w = j, where j = (- l) Λ (l/2). The symbol K(w) 1240 represents the binary code for the variable w 1230 under the coding system f(p,m) 1210. It should be noted that coding system 1250 has a purely real base p = -2, which eliminates the need in the prior art for a separate sign data element. Coding systems 1260 and 1270 have purely imaginary bases, p = + j * 2 A (l/2), which are complex conjugates. Coding systems 1280 and 1290 have complex bases, p * = -1 + j, which are also complex conjugates. And, coding system 1300 has a complex base, p = Vi (-1 + j 7 Λ (l/2)). Thus, a coding system may be selected based on the complexity of the arithmetic operation to be performed or on the complexity of the arguments of that operation. It is understood that similar "arithmetical" coding systems are considered to be , within the scope of the invention. A coding system is "arithmetical" if given the complex numbers Zl and Z2 that may be represented in the coding system, the numbers corresponding to -Zl, -Z2, Zl + Z2, and Zl * Z2 may also be represented by the coding system. For example, under coding system 1250 where f(p,m) 1210 = p Λ m for even m and j * p A (m-1) for odd m, where p 1210 = -2, and where u 1220 =1 and w 1230 = j, and where the code for w under f(p,m), represented by K(w), is K(w) 1240 = 10, a complex number Z = Xa +j Xb = 7 + j4 would be coded as follows: Z = Xa + j Xb = 7 + j4 610 Xb = u * Xb = l * 4 = 4 620 Xa = 7 = (1 * (-2) Λ 4) + (1 * (-2) Λ 3) + (0 * (-2) Λ 2) + (1 * (-2) A 1) + (1 * (-2) Λ 0) 630 Xb = 4 = *** (0* (-2) Λ 4) + (0 * (-2) Λ 3) + (1 * (-2) Λ 2) + (0* (-2) Λ 1) + (0 * (-2) A 0) 640 K(Xa) = 11011 650 K(Xb) -= 00100 660 K(Z) = 0101100101 670, 680 One may check the code K(Z) in the above example by expanding it using Z = Sum (2m) [y(m) * f(p,m)] or Z = Sum (2m)[y(m) * p A (m/2)] for even m plus Sum(2m) [y(m) * j * p A ((m-l)/2))] for odd m. The result is as follows: Z = [l*(-2) A (0/2)] + [0*j*(-2) A ((l-l)/2))] + [l*(-2) (2/2)] + [0*j*(-2) ((3-l)/2))] + [0*(-2) (4/2)j + [l*j*(-2) ((5-l)/2))] + [l*(-2) (6/2)] + [0*j*(-2) ((7-l)/2))] + [l*(-2) A (8/2)] + [0*j*(-2) A ((9-l)/2))] Or, Z = [1 *(-2) A (0)] + [1 *(-2) A (l)] + [1 *j*(-2) A (2)] + [1 *(-2) A (3)] + [1 *(-2) A (4)] Or, Z = l -2 +j 4 - 8 + 16 Or, Z = 7 +j 4 Referring back to FIG. 6, at step 690, the desired arithmetic operation is performed on the complex number Z which has been coded as K(Z) and where Z = Xa + w Xb. The instruction for a desired arithmetic operation may be read by the coprocessor 60 from the CPU 20 and/or DRAM 30. In general, the complex number Z may be represented in floating point form as Z - (-2) A k * M, where M is the mantissa which is a complex number having the code K(Z) and where k is the exponent which is a real (positive or negative) number. The steps 610 through 680 may be performed on additional complex numbers where the desired arithmetic operation involves multiple arguments. For example, squaring a complex number may involve a single complex number whereas multiplication may involve two complex numbers. It is understood that all arithmetic operations are considered to be within the scope of the invention. Such arithmetic operations my include addition, subtraction, multiplication, division, comparison, logarithms, binomials, potentiating, square roots, cube roots, sine, cosine, hyperbolic functions, polar/cartesian coordinates, and fast fourier transforms. As noted above, and referring to FIG. 1 and FIG. 2, the ROM 120 preferably contains software associated with various arithmetic operations, which is not necessary for understanding the invention. The software contained in ROM 120 may be executed by any and/or all of the coprocessor 60, confrol unit 90, mantissa unit 100, and exponent unit 110. Referring to FIG. 3, FIG. 4, and FIG. 5, there is shown carry-in circuitry for performing arithmetic operations on one or more complex numbers of the form Z which have been coded as K(Z), where Z = Xa + w Xb, in the coprocessor 60. In general, as the complexity of the coding system increases from the simpler systems 1250, 1260, and 1270, which are based on purely real or imaginary values of p, to the more complex systems 1280, 1290, and 1300, which are based on complex values of p, the speed of processing increases as does the size (i.e. complexity) of the carry-in circuitry. In particular, for coding systems 1250, 1260, and 1270, the carry-in circuitry 300 illustrated in FIG. 3 would be used for bitwise operations (i.e. addition, subtraction, multiplication by a constant, and inversion) associated with arithmetic operations. The carry-in 380 for the k digit 340 of two coded complex numbers A and B whose resultant is C, designated by A(k) 310, B(k) 320, and C(k) 330, respectively, is given by the carry-out 380 ofthe k-2 360 digit. For coding systems 1280 and 1290, the carry-in circuitry 400 illustrated in FIG. 4 would be used for bitwise operations (i.e. addition, subtraction, multiplication by a constant, and inversion) associated with arithmetic operations. The carry-in 490 for the k digit 440 of two coded complex numbers A and B whose resultant is C, designated by A(k) 410, B(k) 420, and C(k) 430, respectively, is given by the sum of the carry-outs of the k-2 460, k-3 470, and k-4480digits. For coding system 1300, the carry-in circuitry 510 illustrated in FIG. 5 would be used for bitwise operations (i.e. addition, subtraction, multiplication by a constant, and inversion) associated with arithmetic operations. The carry-in 560 for the k digit 570 of two coded complex numbers A and B whose resultant is C, designated by A(k) 520, B(k) 530, and C(k) 540, respectively, is given by the sum of the carry-outs of the k-1 580, k-2 590, and k-3 595 digits. Referring again to FIG. 1 and FIG. 2, in order to perform arithmetic operations on one or more complex numbers of the form Z which have been coded as K(Z), where Z = Xa + w Xb, the coprocessor 60 may contain specialized comparison and adder circuitry. The specialized comparison and adder circuitry is illustrated in FIG. 8, FIG. 9, FIG. 10, and FIG. 11. FIG. 8 shows a block diagram illustrating a comparison unit for two low-digit complex data elements 810. A 820 and B 830 are data elements each consisting of G digits, and each of which have been coded as K(A) = a(G-l), a(G-2)...a(l), a(0) and K(B) = b(G-l), b(G-2)...b(l), b(0), respectively, under one of the coding systems described herein. The output of the comparison unit 810 is C 840. The comparison made by this unit is with respect to the modulus M of each input. The modulus of K(A), designated Ma, is given by Ma = Sum (k= 0 to G-l) [a(k) f(p,k)] and the modulus of K(B) designated by Mb, is given by Mb = Sum (k= 0 to G-l) [b(k) f(p,k)]. A table is constructed within the comparison unit 850 listing the moduli for all G combination pairs of a(k) for K(A) and b(k) for K(B). From this table a second table is constructed listing moduli for each respective pair and the corresponding comparison result C 840. Thus, C 840 may be described by the function C = f({a(k)}, {b(k)}). FIG. 9 shows a block diagram illustrating a comparison unit for unequal high-order data elements 900. A 820 and B 830 are data elements. The subunits 930, 960, and 990 compare the k +1, k, and k -1 digits of A 820 and B 830, respectively. The comparison for the k digit 960 results in two carry-outs WI 970 and W2 980 which are a function of the k digit of A 820, the k digit of B 830, and the two carry-ins Nl 940 and N2 950. The values for WI 970 and W2 980 are derived from a look-up table contained in each subunit 930, 960, and 990. The overall result of the comparison is Ν 910 which may be defined as the unequal high-order digit number. FIG. 10 shows a block diagram illustrating a comparison unit for multi-digit complex codes by the modulus 1000. The data elements A 820 and B 830 are connected to the comparison unit for unequal high-order data elements 900. The output of 900 is N 910. N 910 is then used as a keying signal for the multiplexers 1030 and 1040 which in turn connect two groups of G digits of A 820 and B 830 to the input of the comparison unit for low-digit complex data elements 850. The overall result of the comparison is C 840. FIG. 11 shows a block diagram illustrating an algebraic adder 1100. The inputs to the adder 1100 are n-digit complex number data elements A 1110 and B 1120 which have been coded under one of the coding systems described herein. A 1110 and B 1120 are input to the adder's 1110 double inverters 1160 and 1170, respectively. Also input to the double inverters 1160 and 1170 are the inversion codes ql 1140 and q2 1150, respectively. Each inversion code ql 1140 and q2 1150 may take on the values -1, 0, and 1. The output of each inverter 1160 and 1170 is given by A = ql * A 1190 and B = q2 * B 1195, respectively. As such, the output of the adder 1180 given by C 1130 may be written as C = - A - B or C = -ql * A - q2 * B. Accordingly, the operation A + B may be selected by setting ql = q2 = -1; the operation A - B by setting ql = -1 and q2 = 1; the operation - A + B by setting ql = 1 and q2 = -1; the operation -A - B by setting ql = q2 = 1; the operation - A by setting ql =1 and q2 = 0; and the operation -B by setting ql = 0 and q2 = 1. FIG. 7 illustrates the decoding method steps 700 according to one embodiment of the invention. After completing the arithmetic operation 710 and decoding steps, two data elements representing the real and imaginary parts of the resultant complex number 800 are written by the coprocessor 60 to the CPU 20 and/or DRAM 30. In step 720, the code for the resultant complex number Z, again represented by the symbol K(Z), is read from the registers 130 and 140. At step 730, K(Z) is given by K(Z) = ...y(2m+l), y(2m)...y(m)...y(2), y(l), y(0), y(-l), y(-2)... At step 740 the codes for the real and imaginary parts of the result Z, again represented by K(Xa) and K(Xb), respectively, and such that Z = Xa + w Xb, are obtained by decomposition (de-interlaying) of K(Z) such that K(Xa) 750 = ...a(m)...a(2), a(l), a(0), a(-l), a(-2)... and K(Xb) 760 = ...b(m)...b(2), b(l), b(0), b(-l), b(-2)..., and where a(m/2) = y(m) for even m and b((m-l)/2) = y(m) for odd m. At step 770, the binary code of Xa is converted from base -2 to base 2. At step 780, the binary code of Xb is converted from base -2 to base 2. At step 790, the value of Xb is calculated, in base 2, from the equation Xb = Xb / u. Once again, the value of u depends on the coding system used. At step 800, the result of the arithmetic operation Z, consisting of a real part Xa and an imaginary part Xb, such that Z = Xa + j Xb, where Xa and Xb are real numbers (positive or negative) in base 2 is written by the coprocessor 60 to the CPU 20 and/or DRAM 30.

Claims: CLAIMS The embodiments of the invention for which exclusive property or privilege is claimed are defined as follows: 1. In a data processing system that executes a program of instructions, a method of coding complex numbers, performing arithmetic operations thereon, and decoding the result, comprising the following steps: a) reading the complex number Z, consisting of a real part Xa and an imaginary part Xb, such that Z = Xa + j Xb, where Xa and Xb are real numbers (positive or negative) in base 2 and where j = (-l) A (l/2); b) reading the arithmetic operation to be performed; c) selecting the coding system for complex numbers designated by the function f(p, m), where m is the mth digit in the resulting code for the complex number and where p is the coding base which has associated with it the variables u and w, where u is a real number and w is a complex number such that u * w = j, wherej = (-l) A (l/2); d) calculating the value of Xb in base 2, where Xb = u * Xb; e) converting the binary code of Xa from base 2 to base -2 and representing this converted code as K(Xa) such that K(Xa) = ...a(m)...a(2), a(l), a(0), a(-l), a(- 2)..., where m is the mth digit in the code, a(m) = {0,1}, and Xa in base -2 is given by Xa = Sum(m) [ a(m) * (-2) A m]; f) converting the binary code of Xb from base 2 to base -2 and representing this converted code as K(Xb) such that K(Xb) = ...b(m)...b(2), b(l), b(0), b(-l), . b(-2)..., where m is the mth digit in the code, b(m) = {0,1}, and Xb in base -2 is given by Xb = Sum(m) [ b(m) * (-2)^]; g) composing a code K(Z) for the complex number Z by interlaying the codes K(Xa) and K(Xb) such that K(Z) = ...b(m), a(m)...b(2), a(2), b(l), a(l), b(0), a(0), b(-l), a(-l), b(-2), a(-2)... or, K(Z) = ...y(2m+l), y(2m)...y(m)...y(2), y(l), y(0), y(-l), y(-2)..., where y(2m) = a(m) for even m and y(2m+l) = b(m) for odd m. Note that one my write Z = Sum (2m) [y(m) * f(p,m)], where y(m) = a(m) for even m and y(m) = b(m) for odd m; h) performing the identified arithmetic operation using the complex number Z which has been coded as K(Z), where Z = Xa + w Xb; ' i) representing the result of the arithmetic operation again by the complex number Z which has a corresponding code K(Z), where K(Z) = ...y(2m+l), y(2m)...y(m)...y(2), y(l), y(0), y(-l), y(-2)...; j) obtaining the codes for the real and imaginary parts of the result Z, again represented by K(Xa) and K(Xb), respectively, and such that Z = Xa + w Xb, by decomposition (de-interlaying) of K(Z) such that K(Xa) = ...a(m)...a(2), a(l), a(0), a(-l), a(-2)... and K(Xb) = ...b(m)...b(2), b(l), b(0), b(-l), b(-2)..., and where a(m/2) = y(m) for even m and b((m-l)/2) = y(m) for odd m; k) converting the binary code of Xa, namely K(Xa), from base (-2) to base 2; 1) converting the binary code of Xb, namely K(Xb), from base (-2) to base 2; m) calculating the value of Xb in base 2, where Xb = Xb / u; n) writing the result of the arithmetic operation as the complex number Z, consisting of a real part Xa and an imaginary part Xb, such that Z = Xa + j Xb, where Xa and Xb are real numbers (positive or negative) in base 2. 2. The method of claim 1 where the complex number Z is represented in floating point form as Z = (-2) A k * M, where M is the mantissa which is a complex number having the code K(Z) and where k is the exponent which is a real (positive or negative) number. 3. The method of claim 1 where the coding system is defined symbolically by the function f(p,m) = p A m for even m and j * p A (m-1) for odd m, where p = -2, and where u =1 and w = j, and where the code for w under f(p,m), represented by K(w), is K(w) = 10. 4. The method of claim 1 where the coding system is defined symbolically by the function f(p,m) = ρ A m , where p = j * (2 A (l/2)), and where u = l/((2 A (l/2)) and w = j * (2 A (l/2)), and where the code for w under f(p,m), represented by K(w), is K(w) = 10. 5. The method of claim 1 where the coding system is defined symbolically by the function f(p,m) = p A m , where p = - j * (2 A (l/2)), and where u = -l/((2 Λ (l/2)) and w = - j * (2 Λ (l/2)), and where the code for w under f(p,m), represented by (w), is K(w) = 10. 6. The method of claim 1 where the coding system is defined symbolically by the function f(p,m) = p A m , where p = -1 + j, and where u = 1 and w = j, and where the code for w under f(p,m), represented by K(w), is K(w) = 11. 7. The method of claim 1 where the coding system is defined symbolically by the function f(p,m) = p A m , where p = -1 - j, and where u = -1 and w = -j, and where the code for w under f(p,m), represented by K(w), is K(w) = 11. 8. The method of claim 1 where the coding system is defined symbolically by the function f(p,m) = p A m , where p = l A * (-1 + j * (7 A (l/2))), and where u = l/((7 A (l/2)) and w = j * (7 Λ (l/2)), and where the code for w under f(p,m), represented by K(w), is K(w) = 10101. 9. The method of claim 1 where the coding system is selected by default. 10. The method of claim 1 where the coding system is selected based on the complexity of the arithmetic operation to be performed. 11. The method of claim 1 where the coding system is selected based on the complexity of the complex numbers upon which arithmetic operations are to be performed. 12. The method of claim 1 where the arithmetic operation includes bitwise operations (i.e. addition, subtraction, multiplication by a constant, and inversion (i.e. multiplication by -1)) and general operations such as multiplication, division, comparison, logarithms, binomials, potentiating, square roots, cube roots, sine, cosine, hyperbolic functions, polar/cartesian coordinates, and fast fourier transforms. 13. The method of claim 1 where multiple complex numbers are identified as arguments of the arithmetic operation. 14. The method of claims 3, 4, and 5 where the carry-in for a bitwise operation (i.e. addition, subtraction, multiplication by a constant, and inversion), associated with an arithmetic operation, on the k digit of two coded complex numbers A and B whose resultant is C, designated by A(k), B(k), and C(k), respectively, is given by the carry- out of the k-2 digit. 15. The method of claims 6 and 7 where the carry-in for a bitwise operation (i.e. addition, subtraction, multiplication by a constant, and inversion), associated with an arithmetic operation, on the k digit of two coded complex numbers A and B whose resultant is C, designated by A(k), B(k), and C(k), respectively, is given by the sum of the carry-outs of the k-2, k-3, and k-4 digits. 16. The method of claim 8 where the carry-in for a bitwise operation (i.e. addition, subtraction, multiplication by a constant, and inversion), associated with an arithmetic operation, on the k digit of two coded complex numbers A and B whose resultant is C, designated by A(k), B(k), and C(k), respectively, is given by the sum of the carry-outs of the k-1, k-2, and k-3 digits.

Inventors: KHMELNIK SOLOMON, KHMELNIK, SOLOMON
Applicants: IPROS CORP, KHMELNIK SOLOMON, IPROS CORPORATION, KHMELNIK, SOLOMON
Application year: 2001
Main classification: G06F17
IPC codes: G06F7