--- /dev/null
+This is fixed.info, produced by makeinfo version 4.11 from fixed.texi.
+
+\1f
+File: fixed.info, Node: Top, Next: Basics
+
+Fixed Point Toolbox for Octave
+******************************
+
+* Menu:
+
+* Basics:: The basics of the fixed point types
+* Programming:: Using the fixed-point type in C++ and oct-files
+* Example:: Fixed point type applied to real signal processing example
+* Function Reference:: Documentation from the fixed point specific functions
+
+\1f
+File: fixed.info, Node: Basics, Next: Programming, Prev: Top, Up: Top
+
+1 The Basics of the Fixed Point Types
+*************************************
+
+When implementing algorithms in hardware, it is common to reduce the
+accuracy of the representation of numbers to a smaller number of bits.
+This allows much lower complexity in the hardware, at the cost of
+accuracy and potential overflow problems. Such representations are
+known as fixed point.
+
+ This toolbox supplies a fixed point type that allows Octave to model
+the effects of such a reduction in accuracy of the representation of
+numbers. The major advantage of this toolbox is that with correctly
+written Octave scripts, the same code can be used to test both fixed
+and floating point representations of numbers.
+
+ The authors have tried to take all care to ensure the correct
+functionality of this package. However, as this code is relatively
+recent we expect that there will be a certain number of problems. We
+welcome all reports of bugs, etc or even success stories. The authors
+can be contacted at the e-mail address <David.Bateman@motorola.com>.
+
+* Menu:
+
+* License:: The License used with this Package
+* Representation:: Representation of fixed point numbers
+* Creation:: Creation of fixed point numbers
+* Overflow:: Overflow Behavior of Fixed Point Numbers
+* Built-in Variables:: Fixed Point Built-in Variables
+* Accessing Internal Fields:: The properties of fixed point numbers
+* Function Overloading:: Fixed point numbers with existing Octave functions
+* Together:: Putting it all together
+* Precision:: Problems of precision in calculations
+* Lookup Tables:: The use of Lookup tables with fixed point values;
+* Known Problems:: Read this before reporting a bug
+
+\1f
+File: fixed.info, Node: License, Next: Representation, Prev: Basics, Up: Basics
+
+1.1 The License used with this Package
+======================================
+
+The license used with this package is the GNU General Public License, a
+copy of which is distributed with this package in the file `COPYING'.
+Some commercial users have seemed quite concerned about the use of
+software licensed under the GPL in their development. To ease these
+concerns, the authors state in clear English the terms of the GPL allow
+that
+
+ 1. Any algorithm developed with this package remains the sole property
+ of the party developing the algorithm.
+
+ 2. Changes can be made to the fixed point package, with the
+ constraint that if you supply a version of the fixed point package
+ to another party it must equally be covered by the terms of the
+ GPL.
+
+ We believe that there is little reason to make proprietary changes to
+the fixed point package itself. So this clear distinction between the
+fixed point code itself and algorithms developed with it means that
+there should be little concern for a use of this package in the
+development of a proprietary algorithms.
+
+ Proprietary changes to the fixed point package itself are possible.
+The GPL only comes into play in if you distribute the fixed point
+package with these changes. The algorithms developed on these modified
+versions of the fixed point package remain proprietary in all cases.
+
+\1f
+File: fixed.info, Node: Representation, Next: Creation, Prev: License, Up: Basics
+
+1.2 Fixed Point Representation
+==============================
+
+Fixed point numbers can be represented digitally in several manners,
+including _sign-magnitude_, _ones-complement_ and _twos-complement_.
+The most commonly used technique is _twos-complement_ due to the easier
+implementation of certain operations in this representation. As such
+this toolbox uses the _twos-complement_ representation of numbers
+
+ All fixed point objects in this toolbox are represented by an _int_
+that is used in the following manner
+
+1 bit representing the sign,
+
+IS bits representing the integer part of the number, and
+
+DS bits representing the decimal part of the number.
+
+ The numbers that can then be represented are then given by
+
+ - 2 ^ IS <= X <= 2 ^IS -1
+
+ and the distance between two values of X that are not represented by
+the same fixed point value is 2 ^ (-DS) .
+
+ The number of bits that can be used in the representation of the
+fixed point objects is determined by the number of bits in an _int_ on
+the platform. Valid values include 32- and 64-bits. To avoid issues with
+overflows in additions, one of these bits can not be used. Therefore
+valid values of IS and DS are given by
+
+ 0 < ( IS + DS ) < N - 2
+
+ where N is either 32 or 64, depending on the number of bits in an
+_int_. It should be noted that given the above criteria it is possible
+to create a fixed point representation that lacks a representation of
+the number 1. This makes the implementation of certain operators
+difficult, and so the valid representations are further limited to
+
+ 0 < ( IS, DS, IS + DS ) < N - 2
+
+ This does not mean that other numbers can not be represented by this
+toolbox, but rather that the numbers must be scaled prior to their
+being represented.
+
+ This toolbox allows both fixed point real and complex scalars to be
+represented, as well as fixed point real and complex matrices. The real
+and imaginary parts of the fixed point number and each element of a
+fixed point matrix has its own fixed point representation.
+
+\1f
+File: fixed.info, Node: Creation, Next: Overflow, Prev: Representation, Up: Basics
+
+1.3 Creating Fixed Point Numbers
+================================
+
+Before using a fixed point type, some variables must be created that
+use this type. This is done with the function "fixed". The function
+"fixed" can be used in several manners, depending on the number and
+type of the arguments that are given. It can be used to create scalar,
+complex, matrix and complex matrix values of the fixed type.
+
+ The generic call to "fixed" is `fixed(IS,DS,F)', where the variables
+are
+
+IS
+ The number of bits to use in the representation of the integer
+ part of the fixed point value. This can be either a real or
+ complex value, and can be either a scalar or a matrix. As the
+ fixed point representation of complex values uses separate
+ representations for the real and imaginary parts, a complex value
+ of IS gives the representation of the real and imaginary parts
+ separately. IS must contain only integer or complex integer values
+ greater than zero, and less than 30 or 62 as discussed in the
+ previous section.
+
+DS
+ Similarly to IS, DS represents the number of bits in the decimal
+ part of the fixed point representation. The same conditions as for
+ IS apply to DS
+
+F
+ This variable can be either a scalar, complex, matrix or complex
+ matrix of values that will be converted to a fixed point
+ representation. It can equally be another fixed point value, in
+ which case "fixed" has the effect of changing the representation
+ of F to another representation given by IS and DS.
+
+ If matrices are used for IS, DS, or F, then the dimensions of all of
+the matrices must match. However, it is valid to have IS or DS as
+scalar values, which will be expanded to the same dimension as the
+other matrices, before use in the conversion to a fixed point value.
+The variable F however, must be a matrix if either IS or DS is a matrix.
+
+ The most basic use of the function "fixed" can be seen in the example
+
+ octave:1> a = fixed(7,2,1)
+ ans = 1
+ octave:2> isfixed(a)
+ ans = 1
+ octave:3> whos a
+ *** local user variables:
+
+ prot type rows cols name
+ ==== ==== ==== ==== ====
+ rwd fixed scalar 1 1 a
+
+ which demonstrates the creation of a real scalar fixed point value
+with 7 bits of precision in the integer part, 2 bits in the decimal
+part and the value 1. The function "isfixed" can be used to identify
+whether a variable is of the fixed point type or not. Equally, using
+the "whos" function allows the variable to be identified as "fixed
+scalar".
+
+ Other examples of valid uses of "fixed" are
+
+ octave:1> a = fixed(7, 2, 1);
+ octave:2> b = fixed(7, 2+1i, 1+1i);
+ octave:3> c = fixed(7, 2, 255*rand(10,10) - 128);
+ octave:4> is = 3*ones(10,10) + 4*eye(10);
+ octave:5> d = fixed(is, 1, eye(10));
+ octave:6> e = fixed(7, 2, 255*rand(10,10)-128 +
+ > 1i*(255*rand(10,10)-128));
+ octave:7> whos
+
+ *** local user variables:
+
+ prot type rows cols name
+ ==== ==== ==== ==== ====
+ rwd fixed scalar 1 1 a
+ rwd fixed complex 1 1 b
+ rwd fixed matrix 10 10 c
+ rwd fixed matrix 10 10 d
+ rwd fixed complex matrix 10 10 e
+
+ With two arguments given to "fixed", it is assumed that F is zero or
+a matrix of zeros, and so "fixed" called with two arguments is
+equivalent to calling with three arguments with the third arguments
+being zero. For example
+
+ octave:1> a = fixed([7,7], [2,2], zeros(1,2));
+ octave:2> b = fixed([7,7], [2,2]);
+ octave:3> assert(a == b);
+
+ Called with a single argument "fixed", and a fixed point argument,
+`b = fixed(A)' is equivalent to `b = a'. If A is not itself fixed
+point, then the integer part of A is used to create a fixed point
+value, with the minimum number of bits needed to represent it. For
+example
+
+ octave:1> b = fixed(1:4);
+
+ creates a fixed point row vector with 4 values. Each of these values
+has the minimum number of bits needed to represent it. That is b(1)
+uses 1 bit to represent the integer part, b(2:3) use 2 bits and b(4)
+uses 3 bits. The single argument used with "fixed" can equally be a
+complex value, in which case the real and imaginary parts are treated
+separately to create a composite fixed point value.
+
+\1f
+File: fixed.info, Node: Overflow, Next: Built-in Variables, Prev: Creation, Up: Basics
+
+1.4 Overflow Behavior of Fixed Point Numbers
+============================================
+
+When converting a floating point number to a fixed point number the
+overflow behavior of the fixed point type is such that it implements
+clipping of the data to the maximum or minimum value that is
+representable in the fixed point type. This effectively simulates the
+behavior of an analog to digital conversion. For example
+
+ octave:1> a = fixed(7,2,200)
+ a = 127.75
+ octave:2> a = fixed(7,2,-200)
+ a = -128
+
+ However, the overflow behavior of the fixed point type is distinctly
+different if the overflow occurs within a fixed point operation itself.
+In this case the excess bits generated by the overflow are dropped.
+For example
+
+ octave:1> a = fixed(7,2,127) + fixed(7,2,2)
+ a = -127
+ octave:2> a = fixed(7,2,-127) + fixed(7,2,-2)
+ a = 127
+
+ The case where the representation of the fixed point object changes
+is different again. In this case the sign is maintained, while the
+most-significant bits of the representation are dropped. For example
+
+ octave:1> a = fixed(6, 2, fixed(7, 2, -127.25))
+ a = -63.25
+ octave:2> a = fixed(6, 2, fixed(7, 2, 127.25))
+ a = 63.25
+ octave:3> a = fixed(7, 1, fixed(7, 2, -127.25))
+ a = -127.5
+ octave:4> a = fixed(7, 1, fixed(7, 2, 127.25))
+ a = 127
+
+ In addition to the overflow issue discussed above, it is important to
+take into account what happens when an operator is used on two fixed
+point values with different representations. For example
+
+ octave:1> a = fixed(7,2,1);
+ octave:2> b = fixed(6,3,1);
+ octave:3> c = a + b;
+ octave:4> fprintf("%d integer, and %d decimal bits\n", c.int, c.dec);
+ 7 integer, and 3 decimal bits
+
+ as can be seen the fixed point value is promoted to have an output
+fixed point representation such that `c.int = max(a.int,b.int)' and
+`c.dec = max(a.dec,b.dec)'. If this promotion causes the maximum number
+of bits in a fixed point representation to be exceeded, then an error
+will occur.
+
+\1f
+File: fixed.info, Node: Built-in Variables, Next: Accessing Internal Fields, Prev: Overflow, Up: Basics
+
+1.5 Fixed Point Built-in Variables
+==================================
+
+After the fixed point type is first used, four variables are
+initialized. These are
+
+fixed_point_version
+ The version number of the fixed point code
+
+fixed_point_warn_overflow
+ If non-zero warn of fixed point overflows. The default is 0.
+
+fixed_point_count_operations
+ If non-zero count number of fixed point operations, for later
+ complexity analysis
+
+fixed_point_debug
+ If non-zero keep a copy of fixed point value to allow easier
+ debugging with gdb
+
+ and they can be accessed as normal Octave built-in variables. The
+variable `fixed_point_version' can be used to create tests in the users
+code, to work-around any eventual problems in the fixed point type. For
+example
+
+ if (strcmp(fixed_point_version, "0.6.0"))
+ a = fixed([a.int, b.int], [a.dec, b.dec],
+ [a.x, b.x]);
+ else
+ a = concat(a, b);
+ endif
+
+ although this is not a real example, since both versions of the
+above code work with the released version of the fixed point type.
+
+ When optimizing the number of bits in a fixed point type, it is
+normal to expect overflows to occur, causing errors in the calculations
+which due to the implementation have little effect on the end result of
+the system. However, it is sometimes useful to know exactly where
+overflows are happening or not. A non-zero value of variable
+`fixed_point_warn_overflow' permits the errors conditions in fixed
+point operations to cause a warning message to be printed by octave.
+The default behavior is to have `fixed_point_warn_overflow' be 0.
+
+ The octave fixed point type can keep track of all of the fixed point
+operations and their type. This is very useful for a simple complexity
+analysis of the algorithms. To allow the fixed point type to track
+operations the variable `fixed_point_count_operations' must be
+non-zero. The count of operations can then be reset with the
+"reset_fixed_operations", and the number of operations since the last
+reset can be given by the "display_fixed_operations" function.
+
+ The final in-built variable of the fixed point type is
+`fixed_point_debug'. In normal operation this variable is of no use.
+However setting it to a non-zero value causes a copy of the floating
+point representation of a fixed point value to be stored internally.
+This makes debugging code using the fixed point type significantly
+easier using gdb.
+
+\1f
+File: fixed.info, Node: Accessing Internal Fields, Next: Function Overloading, Prev: Built-in Variables, Up: Basics
+
+1.6 Accessing Internal Fields
+=============================
+
+Once a variable has been defined as a fixed point object, the
+parameters of the field of this structure can be obtained by adding a
+suffix to the variable. Valid suffixes are '.x', '.i', '.sign', '.int'
+and '.dec', which return
+
+.x
+ The floating point representation of the fixed point number
+
+.i
+ The internal integer representation of the fixed point number
+
+.sign
+ The sign of the fixed point number
+
+.int
+ The number of bits representing the integer part of the fixed
+ point number
+
+.dec
+ The number of bits representing the decimal part of the fixed
+ point number
+
+ As each fixed point value in a matrix can have a different number of
+bits in its representation, these suffixes return objects of the same
+size as the original fixed point object. For example
+
+ octave:1> a = [-3:3];
+ octave:2> b = fixed(7,2,a);
+ octave:3> b.sign
+ ans =
+
+ -1 -1 -1 0 1 1 1
+ octave:4> b.int
+ ans =
+
+ 7 7 7 7 7 7 7
+ octave:5> b.dec
+ ans =
+
+ 2 2 2 2 2 2 2
+ octave:5> c = b.x;
+ octave:6> whos
+
+ *** local user variables:
+
+ prot type rows cols name
+ ==== ==== ==== ==== ====
+ rwd matrix 1 7 a
+ rwd fixed matrix 1 7 b
+ rwd matrix 1 7 c
+
+ The suffixes '.int' and '.dec' can also be used to change the
+internal representation of a fixed point value. This can result in a
+loss of precision in the representation of the fixed point value, which
+models the same process as occurs in hardware. For example
+
+ octave:1> b = fixed(7,2,[3.25, 3.25]);
+ octave:2> b(1).dec = [0, 2];
+ b =
+
+ 3 3.25
+
+ However, the value itself should not be changed using the suffix
+'.x'. For instance
+
+ octave:3> b.x = [3, 3];
+ error: can not directly change the value of a fixed structure
+ error: assignment failed, or no method for `fixed matrix = matrix'
+ error: evaluating assignment expression near line 3, column 6
+
+\1f
+File: fixed.info, Node: Function Overloading, Next: Together, Prev: Accessing Internal Fields, Up: Basics
+
+1.7 Function Overloading
+========================
+
+An important consideration in the use of the fixed point toolbox is
+that many of the internal functions of Octave, such as "diag", can not
+accept fixed point objects as an input. This package therefore uses the
+"dispatch" function of Octave-Forge to _overload_ the internal Octave
+functions with equivalent functions that work with fixed point objects,
+so that the standard function names can be used. However, at any time
+the fixed point specific version of the function can be used by
+explicitly calling its function name. The correspondence between the
+internal function names and the fixed point versions is as follows
+
+`abs' - `fabs', `atan2' - `fatan2', `ceil' - `fceil',
+`conj' - `fconj', `cos' - `fcos', `cosh' - `fcosh',
+`cumprod'- `fcumprod', `cumsum' - `fcumsum', `diag' - `fdiag',
+`exp' - `fexp', `floor' - `ffloor', `imag' - `fimag',
+`log10' - `flog10', `log' - `flog', `prod' - `fprod',
+`real' - `freal', `reshape' - `freshape', `round' - `fround',
+`sin' - `fsin', `sinh' - `fsinh', `sort' - `fsort',
+`sqrt' - `fsqrt', `sum' - `fsum', `sumsq' - `fsumsq',
+`tan' - `ftan', `tanh' - `ftanh'.
+
+ The version of the function that is chosen is determined by the first
+argument of the function. So, considering the "atan2" function, if the
+first argument is a _Matrix_, then the normal version of the function
+is called regardless of whether the other argument of the function is a
+fixed point objects or not.
+
+ Many other Octave functions work correctly with fixed point objects
+and so overloaded versions are not necessary. This includes such
+functions as "size" and "any".
+
+ It is also useful to use the '.x' option discussed in the previous
+section, to extract a floating point representation of the fixed point
+object for use with some functions.
+
+\1f
+File: fixed.info, Node: Together, Next: Precision, Prev: Function Overloading, Up: Basics
+
+1.8 Putting it all Together
+===========================
+
+Now that the basic functioning of the fixed point type has been
+discussed, it is time to consider how to put all of it together. The
+list of functions available for the fixed point type can be found in a
+later section of this document (*note Function Reference::)
+
+ The main advantage of this fixed point type over an implementation of
+specific fixed point code, is the ability to define a function once and
+use as either fixed or floating point. Consider the example
+
+ function [b, bf] = testfixed(is,ds,n)
+ a = randn(n,n);
+ af = fixed(is,ds,a);
+ b = myfunc(a,a);
+ bf = myfunc(af,af);
+ endfunction
+
+ function y = myfunc(a,b)
+ y = a + b;
+ endfunction
+
+ In this case `b' and `bf' will be returned from the function
+"testfixed" as floating and fixed point types respectively, while the
+underlying function "myfunc" does not explicitly define that it uses a
+fixed point type. This is a major advantage, as it is critical to
+understand the loss of precision in an algorithm when converting from
+floating to fixed point types for an optimal hardware implementation.
+This mixing of functions that treat both floating and fixed point types
+can even apply to Oct-files (*note Oct-files::).
+
+ The main limitation to the above is the use of the concatenation
+operator, such as `[a,b]', that is hard-coded in versions of Octave
+prior to 2.1.58 and is thus not aware of the fixed-point type.
+Therefore, such code should be avoided in earlier versions of Octave
+and the function "concat" supplied with this package used instead.
+
+\1f
+File: fixed.info, Node: Precision, Next: Lookup Tables, Prev: Together, Up: Basics
+
+1.9 Problems of Precision in Calculations
+=========================================
+
+When dimensioning the fixed point variables, care must be taken so that
+all intermediate operations don't cause a loss in the precision. This
+can occur with any operator or function that takes a large argument and
+gives a small result. Minor variations in the initial argument can
+result in large changes in the final result.
+
+ For instance, consider the "log" operator, in the example
+
+ octave:1> a = fixed(7,2,5.25);
+ octave:2> b = exp(log(a))
+ b = 4.25
+
+ The logarithm `log(a)' is 1.65, which is rounded to 1.5. The
+exponential `exp(log(a))' is then 4.48 which is rounded to 4.25.
+
+ A particular case in point is the power operator for complex number,
+which is implemented by the standard C++ class as
+
+ X ^ Y = exp ( Y * log(X) )
+
+ Unless a large decimal precision is specified for this operator, the
+results will be wildly different than expected. For example
+
+ octave:1> fixed(7,2,4*1i) ^ fixed(7,2,1)
+ ans = 0.000 + 2.250i
+ octave:2> fixed(7,5,4*1i) ^ fixed(7,5,1)
+ ans = 0.000000 + 3.812500i
+
+ If the user chooses to use certain functions and operators, it is
+their responsibility to understand the implementation of the these
+operators, as used by their compilers to ensure the desired behavior.
+Alternatively, the user is recommended to implement certain operations
+as lookup tables, rather than use the built-in operator or function.
+This is how such general functions are implemented in hardware and so
+this is not a significant problem.
+
+\1f
+File: fixed.info, Node: Lookup Tables, Next: Known Problems, Prev: Precision, Up: Basics
+
+1.10 Lookup Tables
+==================
+
+It is common to implement complex functions in hardware by an equivalent
+lookup table. This has the advantage of speed, saving on the complexity
+of a full implementation of certain functions, and avoiding rounding
+errors if the complex function is implemented as a combination of
+sub-functions. The disadvantage is that the lookup requires the use of
+a read-only memory in hardware. Due to size limitations on this memory
+it might not be possible to represent all possible values of a function.
+
+ This section discusses the use of lookup tables with the fixed point
+type. It is assumed that the function "lookup" of Octave-forge is
+installed. The easiest way to explain the use of a fixed point lookup
+table is to discuss an example. Consider a fixed point value in the
+range `-pi:pi', and we wish to represent the sine function in this
+range. The creation of the lookup table can then be performed as
+follows.
+
+ octave:1> is = 2; ds = 6;
+ octave:2> x = [-3.125:0.125:3.125]; % 3.125 ~ pi
+ octave:3> y = sin(x);
+ octave:4> table_float = create_lookup_table(x, y);
+ octave:5> table_fixed = create_lookup_table(fixed(is,ds,x),
+ > fixed(is,ds,y));
+
+ A real implementation of this function in hardware might use to the
+symmetry of the sine function to only require the lookup table for
+`[0:pi/2]' to be stored. However, for simulation there is little reason
+to introduce this complication.
+
+ To evaluate the value of the function use the lookup table created by
+"create_lookup_table", the function "lookup_table" is then used. This
+function can either be used to give the closest evalued value below the
+desired value, or it can be used to interpolate the table as might be
+done in hardware. For example
+
+ octave:6> x0 = [-pi:0.01:pi];
+ octave:7> y0 = sin(x);
+ octave:8> y1 = lookup_table(table_float, x0, "linear");
+ octave:9> y2 = lookup_table(table_fixed, fixed(is,ds,x0), "linear");
+
+\1f
+File: fixed.info, Node: Known Problems, Prev: Lookup Tables, Up: Basics
+
+1.11 Known Problems
+===================
+
+Before reporting a bug compare it to this list of known problems
+
+Concatenation
+ For versions of Octave prior to 2.1.58, the concatenation of fixed
+ point objects returns a Matrix type. That is `[fixed(7,2,[1, 2]),
+ fixed(7,2,3)]' returns a matrix when it should return another
+ fixed point matrix. This problem is due to the implementation of
+ matrix concatenation in earlier versions of Octave being
+ hard-coded for the basic types it knows rather than being
+ expandable.
+
+ The workaround is to explicitly convert the returned value back to
+ the correct fixed point object. For instance
+
+ octave:1> a = fixed(7,2,[1,2]);
+ octave:2> b = fixed(7,2,3);
+ octave:3> c = fixed([a.int, b.int], [a.dec, b.dec],
+ > [a.x, b.x]);
+
+ Alternatively, use the supplied function "concat" that explicitly
+ performs the above above, but can also be used for normal matrices.
+
+ Since Octave version 2.1.58, `[fixed(7,2,[1,2]),fixed(7,2,3)]'
+ returns another fixed point object as expected.
+
+Saving fixed point objects
+ Saving of fixed point variables is only implemented in versions of
+ Octave later than 2.1.53. If you are using a recent version of
+ Octave then saving a fixed point variable is as simple as
+
+ octave:2> save a.mat a
+
+ where A is a fixed point variable. To reload the variable within
+ octave, the fixed point types must be installed prior to a call to
+ "load". That is
+
+ octave:1> dummy = fixed(1,1);
+ octave:2> load a.mat
+
+ With versions of octave later than 2.1.53, fixed point variables
+ can be saved in the octave binary and ascii formats, as well as
+ the HDF5 format. If you are using an earlier version of octave,
+ you can not directly save a fixed point variable. You can however
+ save the information it contains and reconstruct the data
+ afterwards by doing something like
+
+ octave:2> x = a.x; is = a.int; ds = a.dec;
+ octave:3> save a.mat x is ds;
+
+ where A is a fixed point object.
+
+Some functions and operators return very poor results
+ Please read the previous section. Also if the problem manifests
+ when using complex arguments, try to understand your compilers
+ constructor of complex operators and functions from the base fixed
+ point operators and functions. The relevant file for the gcc 3.x
+ versions of the compiler can be found in
+ `/usr/include/g++-v3/bits/std_complex.h'.
+
+Function "foo" returns fixed point types while "bar"
+ does not? If the existing functions, written as m-files, respect
+ the use (or rather non-use) of the concatentaion operator, then
+ these functions will operate correctly. However, many functions
+ don't and thus will return a floating type for a fixed point
+ input, when run on versions of Octave earlier than 2.1.58. All
+ functions should be checked by the user for their correct
+ operation before using them.
+
+ Additionally, existing oct-files will not operate correctly with
+ fixed point inputs, as they are not aware of the fixed point type
+ and will just extract the floating point value to operate on.
+
+ A third class of function are the inbuilt functions like "any",
+ "size", etc. As the fixed point type includes the underlying
+ functions for these to work correctly, they give the correct
+ result even though there is no corresponding fixed point specific
+ version of these functions.
+
+Why is my code so slow when using fixed point
+ This is due to several reasons, firstly the normal functions in
+ octave use optimized libraries to accelerate their operation. This
+ is not possible when using fixed point.
+
+ Also there is no fixed point type native to the machines Octave
+ runs on. This naturally makes the fixed point type slow, due to
+ the fact that the fixed point operators check for overflows, etc
+ at all steps in the operation and act accordingly. This is
+ particularly true in the case of matrix multiplication where each
+ multiplication and addition can be subject to overflows. Thus
+
+ octave:1> x = randn(100,100);
+ octave:2> y0 = fixed(7,6,x*x);
+ octave:3> y1 = fixed(7,6,x)*fixed(7,6,x);
+
+ does not give equivalent operations for Y0 and Y1. With all this
+ additionally checking, you can not expect your code to run as fast
+ when using the fixed point type.
+
+When running under cygwin I get a dlopen error.
+ The build under cygwin is slightly different, in that most of the
+ fixed point functions are compiled as a shared library that is
+ linked to the main oct-file. This is to allow other oct-files to
+ use the fixed-point type which is not possible under cygwin
+ otherwise, since compilation under cygwin requires that all
+ symbols are resolved at compile time.
+
+ If the shared libraries are not installed somewhere that can be
+ found when running octave, then you will get an error like
+
+ octave:1> a = fixed(7,2,1)
+ error: dlopen: Win32 error 126
+ error: `fixed' undefined near line 1 column 5
+ error: evaluating assignment expression near line 1, column 3
+
+ There are two files `liboctave_fixed.dll' and `liboctave_fixed.dll.a'
+that must be installed. Typically, these should be installed in the same
+directory that you can `liboctave.dll' and `liboctave.dll.a'
+respectively. If you use the same `--prefix' option to configure both
+octave and octave-forge then this should happen automatically.
+
+\1f
+File: fixed.info, Node: Programming, Next: Example, Prev: Basics, Up: Top
+
+2 Using the fixed-point type in C++ and oct-files
+*************************************************
+
+Octave supplies a matrix template library to create matrix and vector
+objects from basic types. All of the properties of these Octave classes
+will not be described here. However the base classes and the
+particularly of the classes created using the Octave matrix templates
+will be discussed.
+
+ There are two basic fixed point types: `FixedPoint' and
+`FixedPointComplex' representing the fixed point representation of real
+and complex numbers respectively. The Octave matrix templates are used
+to created the classes `FixedMatrix', `FixedRowVector' and
+`FixedColumnVector' from the base class `FixedPoint'. Similar the
+complex fixed point types `FixedComplexMatrix', `FixedComplexRowVector'
+and `FixedComplexColumnVectors' are constructed from the base class
+`FixedPointComplex'
+
+ This section discusses the definitions of the base classes, their
+extension with the Octave matrix templates, the upper level Octave
+classes and the use of all of these when writing oct-files.
+
+* Menu:
+
+* FixedPoint:: The `FixedPoint' base class
+* FixedPointComplex:: The `FixedPointComplex' base class
+* Derived:: The derived classes using the Octave template classes
+* Upper:: The upper level Octave classes
+* Oct-files:: Writing oct-files with the fixed point type
+
+\1f
+File: fixed.info, Node: FixedPoint, Next: FixedPointComplex, Prev: Programming, Up: Programming
+
+2.1 The `FixedPoint' Base Class
+===============================
+
+* Menu:
+
+* FPConstructors:: `FixedPoint' constructors
+* FPSpecific:: `FixedPoint' specific methods
+* FPOperators:: `FixedPoint' operators
+* FPFunctions:: `FixedPoint' functions
+
+\1f
+File: fixed.info, Node: FPConstructors, Next: FPSpecific, Prev: FixedPoint, Up: FixedPoint
+
+2.1.1 `FixedPoint' Constructors
+-------------------------------
+
+`FixedPoint::FixedPoint ()'
+ Create a fixed point object with only a sign bit
+
+`FixedPoint::FixedPoint (unsigned int is, unsigned int ds)'
+ Create a fixed point object with `is' bits for the integer part and
+ `ds' bits for the decimal part. The fixed point object will be
+ initialized to be zero
+
+`FixedPoint::FixedPoint (unsigned int is, unsigned int ds, FixedPoint &x)'
+ Create a fixed point object with `is' bits for the integer part and
+ `ds' bits for the decimal part, loaded with the fixed point value
+ `x'. If `is + ds' is greater than `sizeof(int)*8 - 2', the error
+ handler is called.
+
+`FixedPoint::FixedPoint (unsigned int is, unsigned int ds, const double x)'
+ Create a fixed point object with `is' bits for the integer part and
+ `ds' bits for the decimal part, loaded with the value `x'. If `is
+ + ds' is greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedPoint::FixedPoint (unsigned int is, unsigned int ds, unsigned int i, unsigned int d)'
+ Create a fixed point object with `is' bits for the integer part and
+ `ds' bits for the decimal part, loading the integer part with `i'
+ and the decimal part with `d'. It should be noted that `i' and `d'
+ are both unsigned and are the strict representation of the bits of
+ the fixed point value.
+
+`FixedPoint::FixedPoint (const int x)'
+ Create a fixed point object with the minimum number of bits for
+ the integer part `is' needed to represent `x'. If `is' is greater
+ than `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPoint::FixedPoint (const double x)'
+ Create a fixed point object with the minimum number of bits for
+ the integer part `is' needed to represent the integer part of `x'.
+ If `is' is greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedPoint::FixedPoint (const FixedPoint &x)'
+ Create a copy of the fixed point object `x'
+
+\1f
+File: fixed.info, Node: FPSpecific, Next: FPOperators, Prev: FPConstructors, Up: FixedPoint
+
+2.1.2 `FixedPoint' Specific Methods
+-----------------------------------
+
+`double FixedPoint::fixedpoint()'
+ Method to create a `double' from the current fixed point object
+
+`double fixedpoint (const FixedPoint &x)'
+ Create a `double' from the fixed point object `x'
+
+`int FixedPoint::sign ()'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ current fixed point object is zero.
+
+`int sign (FixedPoint &x)'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ fixed point object `x' is zero.
+
+`char FixedPoint::signbit ()'
+ Return the sign bit of the current fixed point number (`0' for
+ positive number, `1' for negative number).
+
+`char signbit (FixedPoint &x)'
+ Return the sign bit of the fixed point number `x' (`0' for positive
+ number, `1' for negative number).
+
+`int FixedPoint::getintsize ()'
+ Return the number of bit `is' used to represent the integer part
+ of the current fixed point object.
+
+`int getintsize (FixedPoint &x)'
+ Return the number of bit `is' used to represent the integer part
+ of the fixed point object `x'.
+
+`int FixedPoint::getdecsize ()'
+ Return the number of bit `ds' used to represent the decimal part
+ of the current fixed point object.
+
+`int getdecsize (FixedPoint &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of the fixed point object `x'.
+
+`unsigned int FixedPoint::getnumber ()'
+ Return the integer representation of the fixed point value of the
+ current fixed point object.
+
+`unsigned int getnumber (FixedPoint &x)'
+ Return the integer representation of the fixed point value of the
+ fixed point object `x'.
+
+`FixedPoint FixedPoint::chintsize (const int n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' changed to `n'. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedPoint FixedPoint::chdecsize (const int n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' changed to `n'. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedPoint FixedPoint::incintsize (const int n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by `n'. If `n' is negative, then `is' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPoint FixedPoint::incintsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedPoint FixedPoint::incdecsize (const int n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by `n'. If `n' is negative, then `ds' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPoint FixedPoint::incdecsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+\1f
+File: fixed.info, Node: FPOperators, Next: FPFunctions, Prev: FPSpecific, Up: FixedPoint
+
+2.1.3 `FixedPoint' Operators
+----------------------------
+
+`FixedPoint operator +'
+ Unary `+' of a fixed point object
+
+`FixedPoint operator -'
+ Unary `-' of a fixed point object
+
+`FixedPoint operator !'
+ Unary `!' operator of the fixedpoint object, with the the sign bit.
+ This is not the same operator as `-' and is not the same operator
+ as the octave `!' operator.
+
+`FixedPoint operator ++'
+ Unary increment operator (pre and postfix). Uses the smallest
+ representable value to increment (ie `2 ^ (- ds)' )
+
+`FixedPoint operator --'
+ Unary decrement operator (pre and postfix). Uses the smallest
+ representable value to decrement (ie `2 ^ (- ds)' )
+
+`FixedPoint operator = (const FixedPoint &x)'
+ Assignment operators. Copies fixed point object `x'
+
+`FixedPoint operator += (const FixedPoint &x)'
+`FixedPoint operator -= (const FixedPoint &x)'
+`FixedPoint operator *= (const FixedPoint &x)'
+`FixedPoint operator /= (const FixedPoint &x)'
+ Assignment operators, working on both the input and output
+ objects. The output object's fixed point representation is
+ promoted such that the largest values of `is' and `ds' are taken
+ from the input and output objects. If the result of this operation
+ causes `is + ds' to be greater than `sizeof(int)*8 - 2', the error
+ handler is called.
+
+`FixedPoint operator <<= (const int s)'
+`FixedPoint operator << (const FixedPoint &x, const int s)'
+ Perform a left-shift of a fixed point object. This is equivalent
+ to a multiplication by a power of 2. The sign-bit is preserved.
+ This differs from the `rshift' function discussed below in the
+ `is' and `ds' are unchanged.
+
+`FixedPoint operator >>= (const int s)'
+`FixedPoint operator >> (const FixedPoint &x, const int s)'
+ Perform a right-shift of the fixed point object. This is
+ equivalent to a division by a power of 2. Note that the sign-bit
+ is preserved. This differs from the `rshift' function discussed
+ below in the `is' and `ds' are unchanged.
+
+`FixedPoint operator + (const FixedPoint &x, const FixedPoint &y)'
+`FixedPoint operator - (const FixedPoint &x, const FixedPoint &y)'
+`FixedPoint operator * (const FixedPoint &x, const FixedPoint &y)'
+`FixedPoint operator / (const FixedPoint &x, const FixedPoint &y)'
+ Two argument operators. The output objects fixed point
+ representation is promoted such that the largest values of `is'
+ and `ds' are taken from the two arguments. If the result of this
+ operation causes `is + ds' to be greater than `sizeof(int)*8 -
+ 2', the error handler is called.
+
+`bool operator == (const FixedPoint &x, const FixedPoint &y)'
+`bool operator != (const FixedPoint &x, const FixedPoint &y)'
+`bool operator < (const FixedPoint &x, const FixedPoint &y)'
+`bool operator <= (const FixedPoint &x, const FixedPoint &y)'
+`bool operator > (const FixedPoint &x, const FixedPoint &y)'
+`bool operator >= (const FixedPoint &x, const FixedPoint &y)'
+ Fixed point comparison operators. The fixed point object `x' and
+ `y' can have different representations (values of `is' and `ds').
+
+`std::istream &operator >> (std::istream &s, FixedPoint &x)'
+ Read a fixed point object from `s' stream and store it into `x'
+ keeping the fixed point representation in `x'. If the value read is
+ not a fixed point object, the error handler is invoked.
+
+`std::ostream &operator << (std::ostream &s, const FixedPoint &x)'
+ Send into the stream `s', a formatted fixed point value `x'
+
+\1f
+File: fixed.info, Node: FPFunctions, Prev: FPOperators, Up: FixedPoint
+
+2.1.4 `FixedPoint' Functions
+----------------------------
+
+`FixedPoint rshift (const FixedPoint &x, int s)'
+ Do a right shift of `s' bits of a fixed precision number
+ (equivalent to a division by a power of 2). The representation of
+ the fixed point object is adjusted to suit the new fixed point
+ object (i.e. `ds++' and `is = is == 0 ? 0 : is-1')
+
+`FixedPoint lshift (const FixedPoint &x, int s)'
+ Do a left shift of `s' bits of a fixed precision number (equivalent
+ to a multiplication by a power of 2). The representation of the
+ fixed point object is adjusted to suit the new fixed point object
+ (i.e. `is++' and `ds = ds == 0 ? 0 : ds-1')
+
+`FixedPoint abs (const FixedPoint &x)'
+ Returns the modulus of `x'
+
+`FixedPoint cos (const FixedPoint &x)'
+ Returns the cosine of `x'
+
+`FixedPoint cosh (const FixedPoint &x)'
+ Returns the hyperbolic cosine of `x'
+
+`FixedPoint sin (const FixedPoint &x)'
+ Returns the sine of `x'
+
+`FixedPoint sinh (const FixedPoint &x)'
+ Returns the hyperbolic sine of `x'
+
+`FixedPoint tan (const FixedPoint &x)'
+ Returns the tangent of `x'
+
+`FixedPoint tanh (const FixedPoint &x)'
+ Returns the hyperbolic tangent of `x'
+
+`FixedPoint sqrt (const FixedPoint &x)'
+ Returns the square root of `x'
+
+`FixedPoint pow (const FixedPoint &x, int y)'
+`FixedPoint pow (const FixedPoint &x, double y)'
+`FixedPoint pow (const FixedPoint &x, const FixedPoint &y)'
+ Returns the `x' raised to the power `y'
+
+`FixedPoint exp (const FixedPoint &x)'
+ Returns the exponential of `x'
+
+`FixedPoint log (const FixedPoint &x)'
+ Returns the logarithm of `x'
+
+`FixedPoint log10 (const FixedPoint &x)'
+ Returns the base 10 logarithm of `x'
+
+`FixedPoint atan2 (const FixedPoint &y, const FixedPoint &x)'
+ Returns the arc tangent of `x' and `y'
+
+`FixedPoint floor (const FixedPoint &x)'
+ Returns the rounded value of `x' downwards to the nearest integer
+
+`FixedPoint ceil (const FixedPoint &x)'
+ Returns the rounded value of `x' upwards to the nearest integer
+
+`FixedPoint rint (const FixedPoint &x)'
+ Returns the rounded value of `x' to the nearest integer
+
+`FixedPoint round (const FixedPoint &x)'
+ Returns the rounded value of `x' to the nearest integer. The
+ difference with `rint' is that `0.5' is rounded to `1' and not `0'.
+ This conforms to the behavior of the octave `round' function.
+
+`std::string getbitstring (const FixedPoint &x)'
+ Return a string containing the bits of `x'
+
+\1f
+File: fixed.info, Node: FixedPointComplex, Next: Derived, Prev: FixedPoint, Up: Programming
+
+2.2 The `FixedPointComplex' Base Class
+======================================
+
+The `FixedPointComplex' class is derived using the C++ compilers
+inbuilt `complex' class and is instantiated as
+`std::complex<FixedPoint>'. Therefore the exact behavior of the complex
+fixed point type is determined by the complex class used by the C++
+compiler. The user is advised to understand their C++ compilers
+implementation of the complex functions that they use, and particularly
+the effects that they will have on the precision of fixed point
+operations.
+
+* Menu:
+
+* FPCConstructors:: `FixedPointComplex' constructors
+* FPCSpecific:: `FixedPointComplex' specific methods
+* FPCOperators:: `FixedPointComplex' operators
+* FPCFunctions:: `FixedPointComplex' functions
+
+\1f
+File: fixed.info, Node: FPCConstructors, Next: FPCSpecific, Prev: FixedPointComplex, Up: FixedPointComplex
+
+2.2.1 `FixedPointComplex' Constructors
+--------------------------------------
+
+`FixedPointComplex::FixedPointComplex ()'
+ Create a complex fixed point object with only a sign bit
+
+`FixedPointComplex::FixedPointComplex (unsigned int is, unsigned int ds)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part. The fixed point object
+ will be initialized to zero.
+
+`FixedPointComplex::FixedPointComplex (unsigned int is, unsigned int ds, FixedPoint &x)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the fixed point value `x' in the real part and
+ zero in the imaginary. If `is + ds' is greater than `sizeof(int)*8
+ - 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (unsigned int is, unsigned int ds, FixedPoint &r, FixedPoint &i)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the fixed point value `r' in the real part and
+ `i' the imaginary part. If `is + ds' is greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (unsigned int is, unsigned int ds, FixedPointComplex &x)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the complex fixed point value `x'. If `is + ds'
+ is greater than `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (unsigned int is, unsigned int ds, const double x)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the fixed point value `x' in the real part and
+ zero in the imaginary. If `is + ds' is greater than `sizeof(int)*8
+ - 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (unsigned int is, unsigned int ds, const double r, const double i)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the fixed point value `r' in the real part and
+ `i' in the imaginary part. If `is + ds' is greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (unsigned int is, unsigned int ds, const Complex c)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the fixed point value `c' in the real and
+ imaginary parts. If `is + ds' is greater than `sizeof(int)*8 -
+ 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (unsigned int is, unsigned int ds, const Complex a, const Complex b)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the fixed point value `a' in the integer parts
+ of the of the value and `b' in the decimal part. It should be
+ noted that `a' and `b' are both unsigned and are the strict
+ representation of the bits of the fixed point value and considered
+ as integers. If `is + ds' is greater than `sizeof(int)*8 - 2', the
+ error handler is called.
+
+`FixedPointComplex::FixedPointComplex (const Complex& is, const Complex& ds)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with zero in the real and imaginary parts. The real
+ part of `is' is used for the real part of the complex fixed point
+ object, while the imaginary part of `is' is used for the imaginary
+ part. If either the sum of the real or imaginary parts of `is +
+ ds' is greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedPointComplex::FixedPointComplex (const Complex& is, const Complex& ds, const Complex& c)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the complex fixed point value `c' in the real
+ and imaginary parts. The real part of `is' is used for the real
+ part of the complex fixed point object, while the imaginary part
+ of `is' is used for the imaginary part. If either the sum of the
+ real or imaginary parts of `is + ds' is greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (const Complex& is, const Complex& ds, const FixedPointComplex& c)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the complex fixed point value `c' in the real
+ and imaginary parts. The real part of `is' is used for the real
+ part of the complex fixed point object, while the imaginary part
+ of `is' is used for the imaginary part. If either the sum of the
+ real or imaginary parts of `is + ds' is greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (const Complex& is, const Complex& ds, const Complex& a, const Complex& b)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the fixed point value `a' in the integer parts
+ of the of the value and `b' in the decimal part. It should be
+ noted that `a' and `b' are both unsigned and are the strict
+ representation of the bits of the fixed point value and considered
+ as integers. If either the sum of the real or imaginary parts of
+ `is + ds' is greater than `sizeof(int)*8 - 2', the error handler
+ is called.
+
+`FixedPointComplex::FixedPointComplex (const std::complex<FixedPoint> &c)'
+ Create a complex fixed point object with the minimum number of
+ bits for the integer part `is' needed to represent the real and
+ imaginary integer parts of `x'. If `is' is greater than
+ `sizeof(int)*8 - 2', the error handler is called. The real and
+ imaginary parts are treated separately.
+
+`FixedPointComplex::FixedPointComplex (const FixedPointComplex &x)'
+ Create a copy of the complex fixed point object `x'
+
+`FixedPointComplex::FixedPointComplex (const FixedPoint &x)'
+ Create a copy of the fixed point object `x', into a complex fixed
+ point object leaving the imaginary part at zero.
+
+`FixedPointComplex::FixedPointComplex (const FixedPoint &r, const FixedPoint &i)'
+ Create a copy of the fixed point objects `r' and `i', into a the
+ real and imaginary parts of a complex fixed point object
+ respectively
+
+`FixedPointComplex::FixedPointComplex (const int x)'
+ Create a fixed point object with the minimum number of bits for
+ the integer part `is' needed to represent `x'. If `is' is greater
+ than `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedPointComplex::FixedPointComplex (const double x)'
+ Create a fixed point object with the minimum number of bits for
+ the integer part `is' needed to represent the integer part of `x'.
+ If `is' is greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedPointComplex (const Complex& is, const Complex& ds, const double& d)'
+ Create a complex fixed point object with `is' bits for the integer
+ part and `ds' bits for the decimal part of both real and imaginary
+ parts, loaded with the double value `d' in the real and zero in
+ the imaginary parts. The real part of `is' is used for the real
+ part of the complex fixed point object, while the imaginary part
+ of `is' is used for the imaginary part. If either the sum of the
+ real or imaginary parts of `is + ds' is greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+\1f
+File: fixed.info, Node: FPCSpecific, Next: FPCOperators, Prev: FPCConstructors, Up: FixedPointComplex
+
+2.2.2 `FixedPointComplex' Specific Methods
+------------------------------------------
+
+`Complex FixedPointComplex::fixedpoint()'
+ Method to create a `Complex' from the current fixed point object
+
+`Complex fixedpoint (const FixedPointComplex &x)'
+ Create a `Complex' from the fixed point object `x'
+
+`Complex FixedPointComplex::sign ()'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ current fixed point object is zero. Real and imaginary parts
+ treated separately and returned in the real and imaginary parts of
+ the return object.
+
+`Complex sign (FixedPointComplex &x)'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ fixed point object `x' is zero. Real and imaginary parts treated
+ separately and returned in the real and imaginary parts of the
+ return object.
+
+`Complex FixedPointComplex::getintsize ()'
+ Return the number of bit `is' used to represent the integer part
+ of the current fixed point object. Real and imaginary parts
+ treated separately and returned in the real and imaginary parts of
+ the return object.
+
+`Complex getintsize (FixedPointComplex &x)'
+ Return the number of bit `is' used to represent the integer part
+ of the fixed point object `x'. Real and imaginary parts treated
+ separately and returned in the real and imaginary parts of the
+ return object.
+
+`Complex FixedPointComplex::getdecsize ()'
+ Return the number of bit `ds' used to represent the decimal part
+ of the current fixed point object. Real and imaginary parts
+ treated separately and returned in the real and imaginary parts of
+ the return object.
+
+`Complex getdecsize (FixedPointComplex &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of the fixed point object `x'. Real and imaginary parts treated
+ separately and returned in the real and imaginary parts of the
+ return object.
+
+`Complex FixedPointComplex::getnumber ()'
+ Return the integer representation of the fixed point value of the
+ current fixed point object. Real and imaginary parts treated
+ separately and returned in the real and imaginary parts of the
+ return object.
+
+`Complex getnumber (FixedPointComplex &x)'
+ Return the integer representation of the fixed point value of the
+ fixed point object `x'. Real and imaginary parts treated
+ separately and returned in the real and imaginary parts of the
+ return object.
+
+`FixedPointComplex FixedPointComplex::chintsize (const Complex n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' changed to `n'. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called. Real and imaginary parts treated separately and returned
+ in the real and imaginary parts of the return object.
+
+`FixedPointComplex FixedPointComplex::chdecsize (const Complex n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' changed to `n'. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called. Real and imaginary parts treated separately and returned
+ in the real and imaginary parts of the return object.
+
+`FixedPointComplex FixedPointComplex::incintsize (const Complex n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by `n'. If `n' is negative, then `is' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called. Real and
+ imaginary parts treated separately and returned in the real and
+ imaginary parts of the return object.
+
+`FixedPointComplex FixedPointComplex::incintsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called. Real and imaginary parts treated separately and returned
+ in the real and imaginary parts of the return object.
+
+`FixedPointComplex FixedPointComplex::incdecsize (const Complex n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by `n'. If `n' is negative, then `ds' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called. Real and
+ imaginary parts treated separately and returned in the real and
+ imaginary parts of the return object.
+
+`FixedPointComplex FixedPointComplex::incdecsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called. Real and imaginary parts treated separately and returned
+ in the real and imaginary parts of the return object.
+
+\1f
+File: fixed.info, Node: FPCOperators, Next: FPCFunctions, Prev: FPCSpecific, Up: FixedPointComplex
+
+2.2.3 `FixedPointComplex' Operators
+-----------------------------------
+
+`FixedPointComplex operator +'
+ Unary `+' of a complex fixed point object
+
+`FixedPointComplex operator -'
+ Unary `-' of a complex fixed point object
+
+`FixedPointComplex operator = (const FixedPointComplex &x)'
+ Assignment operators. Copies complex fixed point object `x'
+
+`FixedPointComplex operator += (const FixedPointComplex &x)'
+`FixedPointComplex operator -= (const FixedPointComplex &x)'
+`FixedPointComplex operator *= (const FixedPointComplex &x)'
+`FixedPointComplex operator /= (const FixedPointComplex &x)'
+ Assignment operators, working on both the input and output
+ objects. The output object's fixed point representation is
+ promoted such that the largest values of `is' and `ds' are taken
+ from the input and output objects. If the result of this operation
+ causes `is + ds' to be greater than `sizeof(int)*8 - 2', the error
+ handler is called.
+
+`FixedPointComplex operator + (const FixedPointComplex &x, const FixedPointComplex &y)'
+`FixedPointComplex operator - (const FixedPointComplex &x, const FixedPointComplex &y)'
+`FixedPointComplex operator * (const FixedPointComplex &x, const FixedPointComplex &y)'
+`FixedPointComplex operator / (const FixedPointComplex &x, const FixedPointComplex &y)'
+ Two argument operators. The output objects complex fixed point
+ representation is promoted such that the largest values of `is'
+ and `ds' are taken from the two arguments. If the result of this
+ operation causes `is + ds' to be greater than `sizeof(int)*8 -
+ 2', the error handler is called.
+
+`bool operator == (const FixedPointComplex &x, const FixedPointComplex &y)'
+`bool operator != (const FixedPointComplex &x, const FixedPointComplex &y)'
+ Complex fixed point comparison operators. The complex fixed point
+ object `x' and `y' can have different representations (values of
+ `is' and `ds').
+
+`std::istream &operator >> (std::istream &s, FixedPointComplex &x)'
+ Read a fixed point object from `s' stream and store it into `x'
+ keeping the fixed point representation in `x'. If the value read is
+ not a fixed point object, the error handler is invoked.
+
+`std::ostream &operator << (std::ostream &s, const FixedPointComplex &x)'
+ Send into the stream `s', a formatted fixed point value `x'
+
+\1f
+File: fixed.info, Node: FPCFunctions, Prev: FPCOperators, Up: FixedPointComplex
+
+2.2.4 `FixedPointComplex' Functions
+-----------------------------------
+
+`FixedPoint abs (const FixedPointComplex &x)'
+ Returns the modulus of `x'
+
+`FixedPoint norm (const FixedPointComplex &x)'
+ Returns the squared magnitude of `x'
+
+`FixedPoint arg (const FixedPointComplex &x)'
+ Returns the arc-tangent of `x'
+
+`FixedPointComplex std::polar (const FixedPoint &r, const FixedPoint &p)'
+ Convert from polar fixed point to a complex fixed point object
+
+`FixedPoint real (const FixedPointComplex &x)'
+ Returns the real part of `x'
+
+`FixedPoint imag (const FixedPointComplex &x)'
+ Returns the imaginary part of `x'
+
+`FixedPointComplex conj (const FixedPointComplex &x)'
+ Returns the conjugate of `x'
+
+`FixedPointComplex cos (const FixedPointComplex &x)'
+ Returns the transcendental cosine of `x'
+
+`FixedPointComplex cosh (const FixedPointComplex &x)'
+ Returns the transcendental hyperbolic cosine of `x'
+
+`FixedPointComplex sin (const FixedPointComplex &x)'
+ Returns the transcendental sine of `x'
+
+`FixedPointComplex sinh (const FixedPointComplex &x)'
+ Returns the transcendental hyperbolic sine of `x'
+
+`FixedPointComplex tan (const FixedPointComplex &x)'
+ Returns the transcendental tangent of `x'
+
+`FixedPointComplex tanh (const FixedPointComplex &x)'
+ Returns the transcendental hyperbolic tangent of `x'
+
+`FixedPointComplex sqrt (const FixedPointComplex &x)'
+ Returns the square root of `x'
+
+`FixedPointComplex pow (const FixedPointComplex &x, int y)'
+`FixedPointComplex pow (const FixedPointComplex &x, const FixedPoint &y)'
+`FixedPointComplex pow (const FixedPointComplex &x, const FixedPointComplex &y)'
+`FixedPointComplex pow (const FixedPoint &x, const FixedPointComplex &y)'
+ Returns the `x' raised to the power `y'. Be careful of precision
+ errors associated with the implementation of this function as a
+ complex type
+
+`FixedPointComplex exp (const FixedPointComplex &x)'
+ Returns the exponential of `x'. Be careful of precision errors
+ associated with the implementation of this function as a complex
+ type
+
+`FixedPointComplex log (const FixedPointComplex &x)'
+ Returns the transcendental logarithm of `x'. Be careful of
+ precision errors associated with the implementation of this
+ function as a complex type
+
+`FixedPointComplex log10 (const FixedPointComplex &x)'
+ Returns the transcendental base 10 logarithm of `x'. Be careful of
+ precision errors associated with the implementation of this
+ function as a complex type
+
+`FixedPointComplex floor (const FixedPointComplex &x)'
+ Returns the rounded value of `x' downwards to the nearest integer,
+ treating the real and imaginary parts separately
+
+`FixedPointComplex ceil (const FixedPointComplex &x)'
+ Returns the rounded value of `x' upwards to the nearest integer,
+ treating the real and imaginary parts separately
+
+`FixedPointComplex rint (const FixedPointComplex &x)'
+ Returns the rounded value of `x' to the nearest integer, treating
+ the real and imaginary parts separately
+
+`FixedPointComplex round (const FixedPointComplex &x)'
+ Returns the rounded value of `x' to the nearest integer. The
+ difference with `rint' is that `0.5' is rounded to `1' and not `0'.
+ This conforms to the behavior of the octave `round' function.
+ Treats the real and imaginary parts separately
+
+\1f
+File: fixed.info, Node: Derived, Next: Upper, Prev: FixedPointComplex, Up: Programming
+
+2.3 The Derived Classes using the Octave Template Classes
+=========================================================
+
+It is not the purpose of this section to discuss the use of the Octave
+template classes, but rather only the additions to the fixed point
+classes that are based on these. For instance the basic constructors
+and operations that are available in the normal floating point Octave
+classes are available within the fixed point classes.
+
+ The notable exceptions are operations involving matrix
+decompositions, including inversion, left division, etc. The reason for
+this is that the precision of these operators and functions will be
+highly implementation dependent. As additional these operators and
+functions are used rarely with a fixed point type, there is no point in
+implementing these operators and function within the fixed point
+classes.
+
+ In addition the the functions and operators previously described for
+the `FixedPoint' and the `FixedPointComplex' types are all available,
+in the same from as previously. So these functions are not documented
+below. Only the constructors and methods that vary from the previously
+described versions are described.
+
+ To fully understand these classes, the user is advised to examine the
+header files `fixedMatrix.h', `fixedRowVector.h' and `fixedColVector.h'
+for the real fixed point objects and `fixedCMatrix.h',
+`fixedCRowVector.h' and `fixedCColVector.h' for the complex fixed point
+objects. In addition the files `MArray.h' and `MArray2.h' from Octave
+should also be examined.
+
+* Menu:
+
+* FixedMatrix:: `FixedMatrix' class
+* FixedRowVector:: `FixedRowVector' class
+* FixedColumnVector:: `FixedColumnVector' class
+* FixedComplexMatrix:: `FixedComplexMatrix' class
+* FixedComplexRowVector:: `FixedComplexRowVector' class
+* FixedComplexColumnVector:: `FixedComplexColumnVector' class
+
+\1f
+File: fixed.info, Node: FixedMatrix, Next: FixedRowVector, Prev: Derived, Up: Derived
+
+2.3.1 `FixedMatrix' class
+-------------------------
+
+`FixedMatrix::FixedMatrix (const MArray2<int> &is, const MArray2<int> &ds)'
+`FixedMatrix::FixedMatrix (const Matrix &is, const Matrix &ds)'
+ Create a fixed point matrix with the number of bits in the integer
+ part of each element represented by `is' and the number in the
+ decimal part by `ds'. The fixed point elements themselves will be
+ initialized to zero.
+
+`FixedMatrix::FixedMatrix (unsigned int is, unsigned int ds, const FixedMatrix& a)'
+`FixedMatrix::FixedMatrix (const MArray2<int> &is, const MArray2<int> &ds, const FixedMatrix& a)'
+`FixedMatrix::FixedMatrix (const Matrix &is, const Matrix &ds, const FixedMatrix& a)'
+ Create a fixed point matrix with the number of bits in the integer
+ part of each element represented by `is' and the number in the
+ decimal part by `ds'. The fixed point elements themselves will be
+ initialized to the fixed point matrix `a'
+
+`FixedMatrix::FixedMatrix (unsigned int is, unsigned int ds, const Matrix& a)'
+`FixedMatrix::FixedMatrix (const MArray2<int> &is, const MArray2<int> &ds, const Matrix& a)'
+`FixedMatrix::FixedMatrix (const Matrix &is, const Matrix &ds, const Matrix& a)'
+ Create a fixed point matrix with the number of bits in the integer
+ part of each element represented by `is' and the number in the
+ decimal part by `ds'. The fixed point elements themselves will be
+ initialized to the matrix `a'
+
+`FixedMatrix::FixedMatrix (unsigned int is, unsigned int ds, const Matrix& a, const Matrix& b)'
+`FixedMatrix::FixedMatrix (const MArray2<int> &is, const MArray2<int> &ds, const Matrix& a, const Matrix& b)'
+`FixedMatrix::FixedMatrix (const Matrix &is, const Matrix &ds, const Matrix& a, const Matrix& b)'
+ Create a fixed point matrix with the number of bits in the integer
+ part of each element represented by `is' and the number in the
+ decimal part by `ds'. The fixed point elements themselves will
+ have the integer parts loaded by the matrix `a' and the decimal
+ part by the matrix `b'. It should be noted that `a' and `b' are
+ both considered as unsigned integers and are the strict
+ representation of the bits of the fixed point value.
+
+`Matrix FixedMatrix::fixedpoint ()'
+ Method to create a `Matrix' from a fixed point matrix `x'
+
+`Matrix fixedpoint (const FixedMatrix &x)'
+ Create a `Matrix' from a fixed point matrix `x'
+
+`Matrix FixedMatrix::sign ()'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ fixed point element is zero, for every element of the current
+ fixed point object.
+
+`Matrix sign (const FixedMatrix &x)'
+ Return `-1' for negative numbers, `1' for positive and `0' if
+ zero, for every element of the fixed point object `x'.
+
+`Matrix FixedMatrix::signbit ()'
+ Return the sign bit for every element of the current fixed point
+ matrix (`0' for positive number, `1' for negative number).
+
+`Matrix signbit (const FixedMatrix &x)'
+ Return the sign bit for every element of the fixed point matrix `x'
+ (`0' for positive number, `1' for negative number).
+
+`Matrix FixedMatrix::getintsize ()'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the current fixed point object.
+
+`Matrix getintsize (const FixedMatrix &x)'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the fixed point object `x'.
+
+`Matrix FixedMatrix::getdecsize ()'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the current fixed point object.
+
+`Matrix getdecsize (const FixedMatrix &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the fixed point object `x'.
+
+`Matrix FixedMatrix::getnumber ()'
+ Return the integer representation of the fixed point value of the
+ each eleement of the current fixed point object.
+
+`Matrix getnumber (const FixedMatrix &x)'
+ Return the integer representation of the fixed point value of the
+ each eleement of the fixed point object `x'.
+
+`FixedMatrix FixedMatrix::chintsize (const Matrix &n)'
+`FixedMatrix FixedMatrix::chintsize (const double n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the integer part
+ `is' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedMatrix FixedMatrix::chdecsize (const double n)'
+`FixedMatrix FixedMatrix::chdecsize (const Matrix &n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the decimal part
+ `ds' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedMatrix FixedMatrix::incintsize (const double n)'
+`FixedMatrix FixedMatrix::incintsize (const Matrix &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by `n'. If `n' is negative, then `is' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedMatrix FixedMatrix::incintsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedMatrix FixedMatrix::incdecsize (const double n)'
+`FixedMatrix FixedMatrix::incdecsize (const Matrix &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by `n'. If `n' is negative, then `ds' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedMatrix FixedMatrix::incdecsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+\1f
+File: fixed.info, Node: FixedRowVector, Next: FixedColumnVector, Prev: FixedMatrix, Up: Derived
+
+2.3.2 `FixedRowVector' class
+----------------------------
+
+`FixedRowVector::FixedRowVector (const MArray<int> &is, const MArray<int> &ds)'
+`FixedRowVector::FixedRowVector (const RowVector &is, const RowVector &ds)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to zero.
+
+`FixedRowVector::FixedRowVector (unsigned int is, unsigned int ds, const FixedRowVector& a)'
+`FixedRowVector::FixedRowVector (const MArray<int> &is, const MArray<int> &ds, const FixedRowVector& a)'
+`FixedRowVector::FixedRowVector (const RowVector &is, const RowVector &ds, const FixedRowVector& a)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to the fixed point row rector `a'
+
+`FixedRowVector::FixedRowVector (unsigned int is, unsigned int ds, const RowVector& a)'
+`FixedRowVector::FixedRowVector (const MArray<int> &is, const MArray<int> &ds, const RowVector& a)'
+`FixedRowVector::FixedRowVector (const RowVector &is, const RowVector &ds, const RowVector& a)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to the row vector `a'
+
+`FixedRowVector::FixedRowVector (unsigned int is, unsigned int ds, const RowVector& a, const RowVector& b)'
+`FixedRowVector::FixedRowVector (const MArray<int> &is, const MArray<int> &ds, const RowVector& a, const RowVector& b)'
+`FixedRowVector::FixedRowVector (const RowVector &is, const RowVector &ds, const RowVector& a, const RowVector& b)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ have the integer parts loaded by the row vector `a' and the
+ decimal part by the row vector `b'. It should be noted that `a'
+ and `b' are both considered as unsigned integers and are the
+ strict representation of the bits of the fixed point value.
+
+`RowVector FixedRowVector::fixedpoint ()'
+ Method to create a `RowVector' from a fixed point row vector `x'
+
+`RowVector fixedpoint (const FixedRowVector &x)'
+ Create a `RowVector' from a fixed point row vector `x'
+
+`RowVector FixedRowVector::sign ()'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ fixed point element is zero, for every element of the current
+ fixed point object.
+
+`RowVector sign (const FixedRowVector &x)'
+ Return `-1' for negative numbers, `1' for positive and `0' if
+ zero, for every element of the fixed point object `x'.
+
+`RowVector FixedRowVector::signbit ()'
+ Return the sign bit for every element of the current fixed point
+ row vector (`0' for positive number, `1' for negative number).
+
+`RowVector signbit (const FixedRowVector &x)'
+ Return the sign bit for every element of the fixed point row
+ vector `x' (`0' for positive number, `1' for negative number).
+
+`RowVector FixedRowVector::getintsize ()'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the current fixed point object.
+
+`RowVector getintsize (const FixedRowVector &x)'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the fixed point object `x'.
+
+`RowVector FixedRowVector::getdecsize ()'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the current fixed point object.
+
+`RowVector getdecsize (const FixedRowVector &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the fixed point object `x'.
+
+`RowVector FixedRowVector::getnumber ()'
+ Return the integer representation of the fixed point value of the
+ each eleement of the current fixed point object.
+
+`RowVector getnumber (const FixedRowVector &x)'
+ Return the integer representation of the fixed point value of the
+ each eleement of the fixed point object `x'.
+
+`FixedRowVector FixedRowVector::chintsize (const RowVector n)'
+`FixedRowVector FixedRowVector::chintsize (const double n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the integer part
+ `is' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedRowVector FixedRowVector::chdecsize (const double n)'
+`FixedRowVector FixedRowVector::chdecsize (const RowVector n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the decimal part
+ `ds' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedRowVector FixedRowVector::incintsize (const double n)'
+`FixedRowVector FixedRowVector::incintsize (const RowVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by `n'. If `n' is negative, then `is' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedRowVector FixedRowVector::incintsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedRowVector FixedRowVector::incdecsize (const double n)'
+`FixedRowVector FixedRowVector::incdecsize (const RowVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by `n'. If `n' is negative, then `ds' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedRowVector FixedRowVector::incdecsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+\1f
+File: fixed.info, Node: FixedColumnVector, Next: FixedComplexMatrix, Prev: FixedRowVector, Up: Derived
+
+2.3.3 `FixedColumnVector' class
+-------------------------------
+
+`FixedColumnVector::FixedColumnVector (const MArray<int> &is, const MArray<int> &ds)'
+`FixedColumnVector::FixedColumnVector (const ColumnVector &is, const ColumnVector &ds)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to zero.
+
+`FixedColumnVector::FixedColumnVector (unsigned int is, unsigned int ds, const FixedColumnVector& a)'
+`FixedColumnVector::FixedColumnVector (const MArray<int> &is, const MArray<int> &ds, const FixedColumnVector& a)'
+`FixedColumnVector::FixedColumnVector (const ColumnVector &is, const ColumnVector &ds, const FixedColumnVector& a)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to the fixed point column vector `a'
+
+`FixedColumnVector::FixedColumnVector (unsigned int is, unsigned int ds, const ColumnVector& a)'
+`FixedColumnVector::FixedColumnVector (const MArray<int> &is, const MArray<int> &ds, const ColumnVector& a)'
+`FixedColumnVector::FixedColumnVector (const ColumnVector &is, const ColumnVector &ds, const ColumnVector& a)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to the column vector `a'
+
+`FixedColumnVector::FixedColumnVector (unsigned int is, unsigned int ds, const ColumnVector& a, const ColumnVector& b)'
+`FixedColumnVector::FixedColumnVector (const MArray<int> &is, const MArray<int> &ds, const ColumnVector& a, const ColumnVector& b)'
+`FixedColumnVector::FixedColumnVector (const ColumnVector &is, const ColumnVector &ds, const ColumnVector& a, const ColumnVector& b)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ have the integer parts loaded by the column vector `a' and the
+ decimal part by the column vector `b'. It should be noted that `a'
+ and `b' are both considered as unsigned integers and are the
+ strict representation of the bits of the fixed point value.
+
+`ColumnVector FixedColumnVector::fixedpoint ()'
+ Method to create a `ColumnVector' from a fixed point column vector
+ `x'
+
+`ColumnVector fixedpoint (const FixedColumnVector &x)'
+ Create a `ColumnVector' from a fixed point column vector `x'
+
+`ColumnVector FixedColumnVector::sign ()'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ fixed point element is zero, for every element of the current
+ fixed point object.
+
+`ColumnVector sign (const FixedColumnVector &x)'
+ Return `-1' for negative numbers, `1' for positive and `0' if
+ zero, for every element of the fixed point object `x'.
+
+`ColumnVector FixedColumnVector::signbit ()'
+ Return the sign bit for every element of the current fixed point
+ column vector (`0' for positive number, `1' for negative number).
+
+`ColumnVector signbit (const FixedColumnVector &x)'
+ Return the sign bit for every element of the fixed point column
+ vector `x' (`0' for positive number, `1' for negative number).
+
+`ColumnVector FixedColumnVector::getintsize ()'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the current fixed point object.
+
+`ColumnVector getintsize (const FixedColumnVector &x)'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the fixed point object `x'.
+
+`ColumnVector FixedColumnVector::getdecsize ()'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the current fixed point object.
+
+`ColumnVector getdecsize (const FixedColumnVector &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the fixed point object `x'.
+
+`ColumnVector FixedColumnVector::getnumber ()'
+ Return the integer representation of the fixed point value of the
+ each eleement of the current fixed point object.
+
+`ColumnVector getnumber (const FixedColumnVector &x)'
+ Return the integer representation of the fixed point value of the
+ each eleement of the fixed point object `x'.
+
+`FixedColumnVector FixedColumnVector::chintsize (const ColumnVector n)'
+`FixedColumnVector FixedColumnVector::chintsize (const double n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the integer part
+ `is' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedColumnVector FixedColumnVector::chdecsize (const double n)'
+`FixedColumnVector FixedColumnVector::chdecsize (const ColumnVector n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the decimal part
+ `ds' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedColumnVector FixedColumnVector::incintsize (const double n)'
+`FixedColumnVector FixedColumnVector::incintsize (const ColumnVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by `n'. If `n' is negative, then `is' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedColumnVector FixedColumnVector::incintsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedColumnVector FixedColumnVector::incdecsize (const double n)'
+`FixedColumnVector FixedColumnVector::incdecsize (const ColumnVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by `n'. If `n' is negative, then `ds' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedColumnVector FixedColumnVector::incdecsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+\1f
+File: fixed.info, Node: FixedComplexMatrix, Next: FixedComplexRowVector, Prev: FixedColumnVector, Up: Derived
+
+2.3.4 `FixedComplexMatrix' class
+--------------------------------
+
+`FixedComplexMatrix::FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds)'
+`FixedComplexMatrix::FixedComplexMatrix (const Matrix &is, const Matrix &ds)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to zero.
+
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to zero.
+
+`FixedComplexMatrix::FixedComplexMatrix (unsigned int is, unsigned int ds, const FixedComplexMatrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (Complex is, Complex ds, const FixedComplexMatrix& a)'
+
+`FixedComplexMatrix::FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds, const FixedComplexMatrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (const Matrix &is, const Matrix &ds, const FixedComplexMatrix& a)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ complex fixed point matrix `a'
+
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const FixedComplexMatrix &x)'
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const FixedMatrix &r, const FixedMatrix &i)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to the complex fixed point matrix `a', or the real
+ part by `r' and the imaginary by `i'.
+
+`FixedComplexMatrix::FixedComplexMatrix (unsigned int is, unsigned int ds, const FixedMatrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (Complex is, Complex ds, const FixedMatrix& a)'
+
+`FixedComplexMatrix::FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds, const FixedMatrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (const Matrix &is, const Matrix &ds, const FixedMatrix& a)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ fixed point matrix `a'
+
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const FixedMatrix &x)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to the fixed point matrix `a'.
+
+`FixedComplexMatrix::FixedComplexMatrix (unsigned int is, unsigned int ds, const ComplexMatrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (Complex is, Complex ds, const ComplexMatrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds, const ComplexMatrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const ComplexMatrix& a)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ complex matrix `a'
+
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const ComplexMatrix &x)'
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const Matrix &r, const Matrix &i)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to the complex matrix `a', or the real part by `r'
+ and the imaginary by `i'.
+
+`FixedComplexMatrix::FixedComplexMatrix (unsigned int is, unsigned int ds, const Matrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (Complex is, Complex ds, const Matrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds, const Matrix& a)'
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const Matrix& a)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ matrix `a'
+
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const Matrix &x)'
+ Create a complex fixed point matrix with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ be initialized to the matrix `a'.
+
+`FixedComplexMatrix::FixedComplexMatrix (unsigned int is, unsigned int ds, const ComplexMatrix& a, const ComplexMatrix& b)'
+`FixedComplexMatrix::FixedComplexMatrix (Complex is, Complex ds, const ComplexMatrix& a, const ComplexMatrix& b)'
+`FixedComplexMatrix::FixedComplexMatrix (const MArray2<int> &is, const MArray2<int> &ds, const ComplexMatrix& a, const ComplexMatrix& b)'
+
+`FixedComplexMatrix::FixedComplexMatrix (const Matrix &is, const Matrix &ds, const ComplexMatrix& a, const ComplexMatrix& b)'
+`FixedComplexMatrix::FixedComplexMatrix (const ComplexMatrix &is, const ComplexMatrix &ds, const ComplexMatrix& a, const ComplexMatrix& b)'
+ Create a fixed point matrix with the number of bits in the integer
+ part of each element represented by `is' and the number in the
+ decimal part by `ds'.The fixed point elements themselves will have
+ the integer parts loaded by the complex matrix `a' and the decimal
+ part by the complex matrix `b'. It should be noted that `a' and
+ `b' are both considered as unsigned complex integers and are the
+ strict representation of the bits of the fixed point value.
+
+`ComplexMatrix FixedComplexMatrix::fixedpoint ()'
+ Method to create a `Matrix' from a fixed point matrix `x'
+
+`ComplexMatrix fixedpoint (const FixedComplexMatrix &x)'
+ Create a `Matrix' from a fixed point matrix `x'
+
+`ComplexMatrix FixedComplexMatrix::sign ()'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ fixed point element is zero, for every element of the current
+ fixed point object.
+
+`ComplexMatrix sign (const FixedComplexMatrix &x)'
+ Return `-1' for negative numbers, `1' for positive and `0' if
+ zero, for every element of the fixed point object `x'.
+
+`ComplexMatrix FixedComplexMatrix::getintsize ()'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the current fixed point object.
+
+`ComplexMatrix getintsize (const FixedComplexMatrix &x)'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the fixed point object `x'.
+
+`ComplexMatrix FixedComplexMatrix::getdecsize ()'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the current fixed point object.
+
+`ComplexMatrix getdecsize (const FixedComplexMatrix &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the fixed point object `x'.
+
+`ComplexMatrix FixedComplexMatrix::getnumber ()'
+ Return the integer representation of the fixed point value of the
+ each eleement of the current fixed point object.
+
+`ComplexMatrix getnumber (const FixedComplexMatrix &x)'
+ Return the integer representation of the fixed point value of the
+ each eleement of the fixed point object `x'.
+
+`FixedComplexMatrix FixedComplexMatrix::chintsize (const ComplexMatrix &n)'
+`FixedComplexMatrix FixedComplexMatrix::chintsize (const double n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the integer part
+ `is' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexMatrix FixedComplexMatrix::chdecsize (const double n)'
+`FixedComplexMatrix FixedComplexMatrix::chdecsize (const ComplexMatrix &n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the decimal part
+ `ds' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexMatrix FixedComplexMatrix::incintsize (const double n)'
+`FixedComplexMatrix FixedComplexMatrix::incintsize (const ComplexMatrix &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by `n'. If `n' is negative, then `is' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexMatrix FixedComplexMatrix::incintsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedComplexMatrix FixedComplexMatrix::incdecsize (const double n)'
+`FixedComplexMatrix FixedComplexMatrix::incdecsize (const ComplexMatrix &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by `n'. If `n' is negative, then `ds' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexMatrix FixedComplex::incdecsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+\1f
+File: fixed.info, Node: FixedComplexRowVector, Next: FixedComplexColumnVector, Prev: FixedComplexMatrix, Up: Derived
+
+2.3.5 `FixedComplexRowVector' class
+-----------------------------------
+
+`FixedComplexRowVector::FixedComplexRowVector (const MArray<int> &is, const MArray<int> &ds)'
+`FixedComplexRowVector::FixedComplexRowVector (const RowVector &is, const RowVector &ds)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to zero.
+
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to zero.
+
+`FixedComplexRowVector::FixedComplexRowVector (unsigned int is, unsigned int ds, const FixedComplexRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (Complex is, Complex ds, const FixedComplexRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (const MArray<int> &is, const MArray<int> &ds, const FixedComplexRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (const RowVector &is, const RowVector &ds, const FixedComplexRowVector& a)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ complex fixed point row vector `a'
+
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const FixedComplexRowVector &x)'
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const FixedRowVector &r, const FixedRowVector &i)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to the complex fixed point row
+ vector `a', or the real part by `r' and the imaginary by `i'.
+
+`FixedComplexRowVector::FixedComplexRowVector (unsigned int is, unsigned int ds, const FixedRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (Complex is, Complex ds, const FixedRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (const MArray<int> &is, const MArray<int> &ds, const FixedRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (const RowVector &is, const RowVector &ds, const FixedRowVector& a)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ fixed point row vector `a'
+
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const FixedRowVector &x)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to the fixed point row vector `a'.
+
+`FixedComplexRowVector::FixedComplexRowVector (unsigned int is, unsigned int ds, const ComplexRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (Complex is, Complex ds, const ComplexRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (const MArray<int> &is, const MArray<int> &ds, const ComplexRowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const ComplexRowVector& a)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ complex row vector `a'
+
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const ComplexRowVector &x)'
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const RowVector &r, const RowVector &i)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to the complex row vector `a', or
+ the real part by `r' and the imaginary by `i'.
+
+`FixedComplexRowVector::FixedComplexRowVector (unsigned int is, unsigned int ds, const RowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (Complex is, Complex ds, const RowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (const MArray<int> &is, const MArray<int> &ds, const RowVector& a)'
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const RowVector& a)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the row
+ vector `a'
+
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const RowVector &x)'
+ Create a complex fixed point row vector with the number of bits in
+ the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to the row vector `a'.
+
+`FixedComplexRowVector::FixedComplexRowVector (unsigned int is, unsigned int ds, const ComplexRowVector& a, const ComplexRowVector& b)'
+`FixedComplexRowVector::FixedComplexRowVector (Complex is, Complex ds, const ComplexRowVector& a, const ComplexRowVector& b)'
+`FixedComplexRowVector::FixedComplexRowVector (const MArray<int> &is, const MArray<int> &ds, const ComplexRowVector& a, const ComplexRowVector& b)'
+`FixedComplexRowVector::FixedComplexRowVector (const RowVector &is, const RowVector &ds, const ComplexRowVector& a, const ComplexRowVector& b)'
+`FixedComplexRowVector::FixedComplexRowVector (const ComplexRowVector &is, const ComplexRowVector &ds, const ComplexRowVector& a, const ComplexRowVector& b)'
+ Create a fixed point row vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ have the integer parts loaded by the complex row vector `a' and
+ the decimal part by the complex row vector `b'. It should be noted
+ that `a' and `b' are both considered as unsigned complex integers
+ and are the strict representation of the bits of the fixed point
+ value.
+
+`ComplexRowVector FixedComplexRowVector::fixedpoint ()'
+ Method to create a `RowVector' from a fixed point row vector `x'
+
+`ComplexRowVector fixedpoint (const FixedComplexRowVector &x)'
+ Create a `RowVector' from a fixed point row vector `x'
+
+`ComplexRowVector FixedComplexRowVector::sign ()'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ fixed point element is zero, for every element of the current
+ fixed point object.
+
+`ComplexRowVector sign (const FixedComplexRowVector &x)'
+ Return `-1' for negative numbers, `1' for positive and `0' if
+ zero, for every element of the fixed point object `x'.
+
+`ComplexRowVector FixedComplexRowVector::getintsize ()'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the current fixed point object.
+
+`ComplexRowVector getintsize (const FixedComplexRowVector &x)'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the fixed point object `x'.
+
+`ComplexRowVector FixedComplexRowVector::getdecsize ()'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the current fixed point object.
+
+`ComplexRowVector getdecsize (const FixedComplexRowVector &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the fixed point object `x'.
+
+`ComplexRowVector getdecsize (const FixedComplexRowVector &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the fixed point object `x'.
+
+`ComplexRowVector FixedComplexRowVector::getnumber ()'
+ Return the integer representation of the fixed point value of the
+ each eleement of the current fixed point object.
+
+`FixedComplexRowVector FixedComplexRowVector::chintsize (const ComplexRowVector &n)'
+`FixedComplexRowVector FixedComplexRowVector::chintsize (const double n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the integer part
+ `is' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexRowVector FixedComplexRowVector::chdecsize (const double n)'
+`FixedComplexRowVector FixedComplexRowVector::chdecsize (const ComplexRowVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the decimal part
+ `ds' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexRowVector FixedComplexRowVector::incintsize (const Complex n)'
+`FixedComplexRowVector FixedComplexRowVector::incintsize (const ComplexRowVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by `n'. If `n' is negative, then `is' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexRowVector FixedComplexRowVector::incintsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedComplexRowVector FixedComplexRowVector::incdecsize (const Complex n)'
+`FixedComplexRowVector FixedComplexRowVector::incdecsize (const ComplexRowVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by `n'. If `n' is negative, then `ds' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexRowVector FixedComplexRowVector::incdecsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+\1f
+File: fixed.info, Node: FixedComplexColumnVector, Prev: FixedComplexRowVector, Up: Derived
+
+2.3.6 `FixedComplexColumnVector' class
+--------------------------------------
+
+`FixedComplexColumnVector::FixedComplexColumnVector (const MArray<int> &is, const MArray<int> &ds)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ColumnVector &is, const ColumnVector &ds)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to zero.
+
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to zero.
+
+`FixedComplexColumnVector::FixedComplexColumnVector (unsigned int is, unsigned int ds, const FixedComplexColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (Complex is, Complex ds, const FixedComplexColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const MArray<int> &is, const MArray<int> &ds, const FixedComplexColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ColumnVector &is, const ColumnVector &ds, const FixedComplexColumnVector& a)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ complex fixed point column vector `a'
+
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const FixedComplexColumnVector &x)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const FixedColumnVector &r, const FixedColumnVector &i)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to the complex fixed point column
+ vector `a', or the real part by `r' and the imaginary by `i'.
+
+`FixedComplexColumnVector::FixedComplexColumnVector (unsigned int is, unsigned int ds, const FixedColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (Complex is, Complex ds, const FixedColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const MArray<int> &is, const MArray<int> &ds, const FixedColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ColumnVector &is, const ColumnVector &ds, const FixedColumnVector& a)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ fixed point column vector `a'
+
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const FixedColumnVector &x)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to the fixed point column vector
+ `a'.
+
+`FixedComplexColumnVector::FixedComplexColumnVector (unsigned int is, unsigned int ds, const ComplexColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (Complex is, Complex ds, const ComplexColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const MArray<int> &is, const MArray<int> &ds, const ComplexColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const ComplexColumnVector& a)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ complex column vector `a'
+
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const ComplexColumnVector &x)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const ColumnVector &r, const ColumnVector &i)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to the complex column vector `a',
+ or the real part by `r' and the imaginary by `i'.
+
+`FixedComplexColumnVector::FixedComplexColumnVector (unsigned int is, unsigned int ds, const ColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (Complex is, Complex ds, const ColumnVector& a)'
+
+`FixedComplexColumnVector::FixedComplexColumnVector (const MArray<int> &is, const MArray<int> &ds, const ColumnVector& a)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const ColumnVector& a)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of the real and imaginary part of each element
+ represented by `is' and the number in the decimal part by `ds'.
+ The fixed point elements themselves will be initialized to the
+ column vector `a'
+
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const ColumnVector &x)'
+ Create a complex fixed point column vector with the number of bits
+ in the integer part of each element represented by `is' and the
+ number in the decimal part by `ds'. The fixed point elements
+ themselves will be initialized to the column vector `a'.
+
+`FixedComplexColumnVector::FixedComplexColumnVector (unsigned int is, unsigned int ds, const ComplexColumnVector& a, const ComplexColumnVector& b)'
+`FixedComplexColumnVector::FixedComplexColumnVector (Complex is, Complex ds, const ComplexColumnVector& a, const ComplexColumnVector& b)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const MArray<int> &is, const MArray<int> &ds, const ComplexColumnVector& a, const ComplexColumnVector& b)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ColumnVector &is, const ColumnVector &ds, const ComplexColumnVector& a, const ComplexColumnVector& b)'
+`FixedComplexColumnVector::FixedComplexColumnVector (const ComplexColumnVector &is, const ComplexColumnVector &ds, const ComplexColumnVector& a, const ComplexColumnVector& b)'
+ Create a fixed point column vector with the number of bits in the
+ integer part of each element represented by `is' and the number in
+ the decimal part by `ds'. The fixed point elements themselves will
+ have the integer parts loaded by the complex column vector `a' and
+ the decimal part by the compelx column vector `b'. It should be
+ noted that `a' and `b' are both considered as unsigned compelx
+ integers and are the strict representation of the bits of the
+ fixed point value.
+
+`ComplexColumnVector FixedComplexColumnVector::fixedpoint ()'
+ Method to create a `ColumnVector' from a fixed point column vector
+ `x'
+
+`ComplexColumnVector fixedpoint (const FixedComplexColumnVector &x)'
+ Create a `ColumnVector' from a fixed point column vector `x'
+
+`ComplexColumnVector FixedComplexColumnVector::sign ()'
+ Return `-1' for negative numbers, `1' for positive and `0' if the
+ fixed point element is zero, for every element of the current
+ fixed point object.
+
+`ComplexColumnVector sign (const FixedComplexColumnVector &x)'
+ Return `-1' for negative numbers, `1' for positive and `0' if
+ zero, for every element of the fixed point object `x'.
+
+`ComplexColumnVector FixedComplexColumnVector::getintsize ()'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the current fixed point object.
+
+`ComplexColumnVector getintsize (const FixedComplexColumnVector &x)'
+ Return the number of bit `is' used to represent the integer part
+ of each element of the fixed point object `x'.
+
+`ComplexColumnVector FixedComplexColumnVector::getdecsize ()'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the current fixed point object.
+
+`ComplexColumnVector getdecsize (const FixedComplexColumnVector &x)'
+ Return the number of bit `ds' used to represent the decimal part
+ of each element of the fixed point object `x'.
+
+`ComplexColumnVector FixedComplexColumnVector::getnumber ()'
+ Return the integer representation of the fixed point value of the
+ each eleement of the current fixed point object.
+
+`ComplexColumnVector getnumber (const FixedComplexColumnVector &x)'
+ Return the integer representation of the fixed point value of the
+ each eleement of the fixed point object `x'.
+
+`FixedComplexColumnVector FixedComplexColumnVector::chintsize (const ComplexColumnVector &n)'
+`FixedComplexColumnVector FixedComplexColumnVector::chintsize (const double n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the integer part
+ `is' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexColumnVector FixedComplexColumnVector::chdecsize (const double n)'
+`FixedComplexColumnVector FixedComplexColumnVector::chdecsize (const ComplexColumnVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ object but with the number of bits representing the decimal part
+ `ds' of every element changed to `n'. If the result of this
+ operation causes any element of `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexColumnVector FixedComplexColumnVector::incintsize (const double n)'
+`FixedComplexColumnVector FixedComplexColumnVector::incintsize (const ComplexColumnVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by `n'. If `n' is negative, then `is' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexColumnVector FixedComplexColumnVector::incintsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the integer part
+ `is' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+`FixedComplexColumnVector FixedComplexColumnVector::incdecsize (const double n)'
+`FixedComplexColumnVector FixedComplexColumnVector::incdecsize (const ComplexColumnVector &n)'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by `n'. If `n' is negative, then `ds' is decreased.
+ If the result of this operation causes `is + ds' to be greater than
+ `sizeof(int)*8 - 2', the error handler is called.
+
+`FixedComplexColumnVector FixedComplexColumnVector::incdecsize ()'
+ Return a fixed point object equivalent to the current fixed point
+ number but with the number of bits representing the decimal part
+ `ds' increased by 1. If the result of this operation causes `is +
+ ds' to be greater than `sizeof(int)*8 - 2', the error handler is
+ called.
+
+\1f
+File: fixed.info, Node: Upper, Next: Oct-files, Prev: Derived, Up: Programming
+
+2.4 The Upper Level Octave Classes
+==================================
+
+There are 4 upper level classes that define the interface of the fixed
+point type to the octave interpreter. These mirror similar definitions
+for floating values in octave and are
+
+ `octave_fixed' -> `octave_scalar'
+ `octave_fixed_complex' -> `octave_complex'
+ `octave_fixed_matrix' -> `octave_matrix'
+ `octave_fixed_complex_matrix' -> `octave_complex_matrix'
+
+ These fixed point classes use the same base classes as the
+corresponding floating classes, and so have similar capabilities.
+However, one notable addition are the methods to obtain the base fixed
+point objects from these classes, and also correspond to similar
+floating point methods. These are
+
+ `fixed_value' -> `scalar_value'
+ `fixed_complex_value' -> `complex_value'
+ `fixed_matrix_value' -> `matrix_value'
+ `fixed_complex_matrix_value' -> `complex_matrix_value'
+
+ and can be used in all fixed point classes, subject to a possible
+reduction operations (eg. casts a `FixedComplexMatrix' as a
+`FixedPoint'). In addition the methods `scalar_value', `complex_value',
+`matrix_value' and `complex_matrix_value' can all be used.
+
+ The user should examine the files `ov-fixed-cx-mat.h',
+`ov-fixed-complex.h', `ov-fixed-mat.h' and `ov-fixed.h' and the base
+classes in the files `ov-base-fixed.h', `ov-base-fixed-mat.h', and
+file `ov-base.h' within octave to see the methods that are available
+for the upper level classes.
+
+\1f
+File: fixed.info, Node: Oct-files, Prev: Upper, Up: Programming
+
+2.5 Writing Oct-files with the Fixed Point Type
+===============================================
+
+It is not the purpose of this section to discuss how to write an
+oct-file, or discuss what they are, but rather the specifics of using
+oct-files with the fixed point type. An oct-file is a means of writing
+an octave function in a compilable language like C++, rather than as a
+script file. This results in a significant acceleration in the code.
+The reader is referred to the tutorial available at
+`http://octave.sourceforge.net/coda/coda.html'. The examples discussed
+here assume that the oct-file is written entirely in C++.
+
+* Menu:
+
+* Templates:: Using C++ Templates in Oct-files
+* Problems:: Specific Problems of Oct-files using Fixed Point
+* Cygwin:: Specific points to note when using Oct-files and Cygwin
+* OctExample:: A Simple Example of an Oct-file
+
+\1f
+File: fixed.info, Node: Templates, Next: Problems, Prev: Oct-files, Up: Oct-files
+
+2.5.1 Using C++ Templates in Oct-files
+--------------------------------------
+
+When using the fixed point toolbox, you will almost certainly want to
+compare an implementation in fixed-point against the corresponding
+implementation in floating point. This allows the degradation due to
+the conversion to a fixed-point algorithm to be easily observed. The
+concept of C++ templates allows easy implementation of both fixed and
+floating point versions of the same code. For example consider
+
+ template <class A, class B>
+ A myfunc(const A &a, const B &b) {
+ return (a + b);
+ }
+
+ // Floating point instantiations
+ template double myfunc (const double&, const double&);
+ template Complex myfunc (const Complex&, const double&);
+ template Matrix myfunc (const Matrix&, const double&);
+ template ComplexMatrix myfunc (const ComplexMatrix&, const double&);
+
+ // Fixed point instantiations
+ template FixedPoint myfunc (const FixedPoint&, const FixedPoint&);
+ template FixedPointComplex myfunc (const FixedPointComplex&,
+ const FixedPoint&);
+ template FixedMatrix myfunc (const FixedMatrix&, const FixedPoint&);
+ template FixedComplexMatrix myfunc (const FixedComplexMatrix&,
+ const FixedPoint&);
+
+ Eight versions of the function `myfunc' are created, that allow its
+use with all floating and fixed types.
+
+\1f
+File: fixed.info, Node: Problems, Next: Cygwin, Prev: Templates, Up: Oct-files
+
+2.5.2 Specific Problems of Oct-files using Fixed Point
+------------------------------------------------------
+
+The fact that the fixed point type is loadable, means that the symbols
+of this type are not available till the first use of a fixed point
+variable. This means that the function "fixed" must be called at least
+once prior to accessing fixed point values in an oct-file. If a user
+function is called, that uses a fixed point type, before the type is
+loaded the result will be an error message complaining of unknown
+symbols. For example
+
+ octave:1> fixed_inc(a)
+ error: /home/dbateman/octave/fixed/fixed_inc.oct: undefined symbol:
+ _ZN24octave_base_fixed_matrixI18FixedComplexMatrixE7subsref
+ ERKSsRKSt4listI17octave_value_listSaIS5_EE
+ error: `fixed_inc' undefined near line 1 column 1
+
+ This should not in itself result in an abnormal exit from Octave.
+
+ Another problem when accessing fixed point variables within
+oct-files, is that the Octave `octave_value' class knows nothing about
+this type. So you can not directly call a method such as
+`fixed_value()' on the input arguments, but rather must cast the
+representation of the `octave_value' as a fixed type and then call the
+relevant method. An example of extracting a fixed point value from an
+`octave_value' variable `arg' is then
+
+ octave_value arg;
+ ...
+ if (arg.type_id () == octave_fixed::static_type_id ()) {
+ FixedPoint f = ((const octave_fixed&) arg.get_rep()).fixed_value();
+
+ Similarly, the return value from an oct-file is itself either an
+`octave_value' or an `octave_value_list'. So a special means of
+creating the return value must be used. For example
+
+ octave_value_list retval;
+ Matrix m;
+ FixedPoint f;
+ ...
+ retval(0) = octave_value(m);
+ retval(1) = new octave_fixed (f);
+
+\1f
+File: fixed.info, Node: Cygwin, Next: OctExample, Prev: Problems, Up: Oct-files
+
+2.5.3 Specific points to note when using Oct-files and Cygwin
+-------------------------------------------------------------
+
+When using the GNU C++ compiler under Cygwin to create a shared object,
+such as an oct-file, the symbols must be resolved at compile time. This
+is as opposed to a Unix platform where the resolution of the symbols
+can be left till runtime. For this reason the fixed point type, when
+built under Cygwin is split into an oct-file and a shared library
+called `liboctave_fixed.dll'. This is as opposed to the situation under
+Unix, where only the Oct-file containing all of the fixed point type is
+needed.
+
+ This has the implication that when you build an Oct-file under Cygwin
+using the fixed point type, that they must be linked to
+`liboctave_fixed.dll'. An appropriate means to do this is for example
+
+ % mkoctfile -loctave_fixed myfile.cc
+
+ The file `liboctave_fixed.dll' and `liboctave_fixed.dll.a' must be
+located somewhere that the compiler can find them. If these are
+installed in the same directory as `liboctave.dll' and
+`liboctave.dll.a' respectively, then `mkoctfile' will find them
+automatically.
+
+\1f
+File: fixed.info, Node: OctExample, Prev: Cygwin, Up: Oct-files
+
+2.5.4 A Simple Example of an Oct-file
+-------------------------------------
+
+An example of a simple oct-file written in C++ using the fixed point
+type can be seen below. It integrates the ideas discussed previously.
+
+ #include <octave/config.h>
+ #include <octave/oct.h>
+ #include "fixed.h"
+
+ template <class A, class B>
+ A myfunc(const A &a, const B &b) {
+ return (a + b);
+ }
+
+ // Floating point instantiations
+ template double myfunc (const double&, const double&);
+ template Complex myfunc (const Complex&, const double&);
+ template Matrix myfunc (const Matrix&, const double&);
+ template ComplexMatrix myfunc (const ComplexMatrix&, const double&);
+
+ // Fixed point instantiations
+ template FixedPoint myfunc (const FixedPoint&, const FixedPoint&);
+ template FixedPointComplex myfunc (const FixedPointComplex&,
+ const FixedPoint&);
+ template FixedMatrix myfunc (const FixedMatrix&, const FixedPoint&);
+ template FixedComplexMatrix myfunc (const FixedComplexMatrix&,
+ const FixedPoint&);
+
+ DEFUN_DLD (fixed_inc, args, ,
+ "-*- texinfo -*-\n\
+ @deftypefn {Loadable Function} {@var{y} =} fixed_inc (@var{x})\n\
+ Example code of the use of the fixed point types in an oct-file.\n\
+ Returns @code{@var{x} + 1}\n\
+ @end deftypefn")
+ {
+ octave_value retval;
+ FixedPoint one(1,0,1,0); // Fixed Point value of 1
+
+ if (args.length() != 1)
+ print_usage("fixed_inc");
+ else
+ if (args(0).type_id () == octave_fixed_matrix::static_type_id ()) {
+ FixedMatrix f = ((const octave_fixed_matrix&) args(0).get_rep()).
+ fixed_matrix_value();
+ retval = new octave_fixed_matrix (myfunc(f,one));
+ } else if (args(0).type_id () == octave_fixed::static_type_id ()) {
+ FixedPoint f = ((const octave_fixed&) args(0).get_rep()).
+ fixed_value();
+ retval = new octave_fixed (myfunc(f,one));
+ } else if (args(0).type_id () ==
+ octave_fixed_complex::static_type_id ()) {
+ FixedPointComplex f = ((const octave_fixed_complex&)
+ args(0).get_rep()).fixed_complex_value();
+ retval = new octave_fixed_complex (myfunc(f,one));
+ } else if (args(0).type_id () ==
+ octave_fixed_complex_matrix::static_type_id ()) {
+ FixedComplexMatrix f = ((const octave_fixed_complex_matrix&)
+ args(0).get_rep()).fixed_complex_matrix_value();
+ retval = new octave_fixed_complex_matrix (myfunc(f,one));
+ } else {
+ // promote the operation to complex matrix. The narrowing op in
+ // octave_value will later change the type if needed. This is not
+ // optimal but is convenient....
+ ComplexMatrix f = args(0).complex_matrix_value();
+ retval = octave_value (myfunc(f,1.));
+ }
+ return retval;
+ }
+
+\1f
+File: fixed.info, Node: Example, Next: Function Reference, Prev: Programming, Up: Top
+
+3 Fixed Point Type Applied to Real Signal Processing Example
+************************************************************
+
+As an example of the use of the fixed point toolbox applied to a real
+signal processing example, we consider the implementation of a Radix-4
+IFFT in an OFDM modulator. Code for this IFFT has been written as a C++
+template class, and integrated as an Octave Oct-file. This allowed a
+single version of the code to be instantiated to perform both the fixed
+and floating point implementations of the same code. The instantiations
+of this class are
+
+ template Fft<double,Complex,ComplexRowVector>;
+ template Fft<FixedPoint,FixedPointComplex,FixedComplexRowVector>;
+
+ template Ifft<double,Complex,ComplexRowVector>;
+ template Ifft<FixedPoint,FixedPointComplex,FixedComplexRowVector>;
+
+ The code for this example is available as part of the release of this
+software package.
+
+ A particular problem of a hardware implementation of an IFFT is that
+each butterfly in the radix-4 IFFT consists of the summation of four
+terms with a suitable phase. Thus, an additional 2 output bits are
+potentially needed after each butterfly of the radix-4 IFFT. There are
+several ways of addressing this issue
+
+ 1. Increase the number of bits in the fixed point representation by
+ two after each radix-4 butterfly. There are then two ways of
+ treating these added bits:
+
+ A. Accept them and let the size of the representation of the
+ fixed point numbers grows. For large IFFT's this is not
+ acceptable
+
+ B. Cut the least significant bits of representation, either
+ after each butterfly, or after groups of butterflies. This
+ reduces the number of bits in the representation, but still
+ trades off complexity to avoid an overflow condition
+
+ 2. Keep the fixed point representation used in the IFFT fixed, but
+ reduce the input signal level to avoid overflows. The IFFT can
+ then have internal overflows.
+
+ An overflow will cause a bit-error which is not necessarily
+critical. The last option is therefore attractive in that it allows the
+minimum complexity in the hardware implementation of the IFFT. However,
+careful investigation of the overflow effects are needed, which can be
+performed with the fixed point toolbox.
+
+ The table below shows the case of a 64QAM OFDM signal similar to that
+used in the 802.11a standard. In this table the OFDM modulator has been
+represented using fixed point, while the rest of the system is assumed
+to be perfect. The table shows the tradeoff between the backoff of the
+RMS power in the frequency domain signal relative to the fixed point
+representation for several different fixed point representations.
+
+ Backoff BER BER BER
+ dB 8+1 Bits 10+1 Bits 12+1 Bits
+ ------ ------- -------- --------
+ 5.00 2.11e-01 2.27e-01 2.30e-01
+ 6.00 1.09e-01 1.18e-01 1.21e-01
+ 7.00 4.23e-02 5.25e-02 5.53e-02
+ 8.00 1.17e-02 1.36e-02 1.48e-02
+ 9.00 5.34e-03 2.21e-03 2.33e-03
+ 10.00 7.49e-03 3.78e-04 3.71e-04
+ 11.00 1.22e-02 0.00e+00 0.00e+00
+ 12.00 2.00e-02 0.00e+00 0.00e+00
+ 13.00 3.12e-02 0.00e+00 0.00e+00
+ 14.00 4.34e-02 0.00e+00 0.00e+00
+ 15.00 6.12e-02 2.31e-07 0.00e+00
+ 16.00 7.53e-02 2.31e-06 0.00e+00
+ 17.00 9.00e-02 1.87e-05 0.00e+00
+ 18.00 1.15e-01 5.56e-05 0.00e+00
+ 19.00 1.30e-01 4.69e-04 0.00e+00
+ 20.00 1.55e-01 1.30e-03 0.00e+00
+ 21.00 1.84e-01 2.96e-03 0.00e+00
+ 22.00 1.98e-01 7.41e-03 0.00e+00
+ 23.00 2.30e-01 1.09e-02 0.00e+00
+ 24.00 2.50e-01 1.99e-02 0.00e+00
+ 25.00 2.73e-01 2.99e-02 0.00e+00
+ 26.00 2.99e-01 4.38e-02 0.00e+00
+ 27.00 3.39e-01 6.09e-02 2.31e-07
+ 28.00 3.51e-01 7.57e-02 2.31e-06
+ 29.00 3.86e-01 8.99e-02 9.72e-06
+ 30.00 3.97e-01 1.16e-01 6.99e-05
+
+ Two regions are clearly visible in this table. When the backoff of
+the RMS power is small, the effects of the overflow in the IFFT
+dominate, and reduce the performance. When the backoff is large, there
+are fewer bits in the fixed point representation relative to the
+average signal power and therefore a slow degradation in the
+performance. It is clear that somewhere between 11 and 13 bits in the
+representation of the fixed point numbers in the IFFT is optimal, with a
+backoff of approximately 13dB.
+
+\1f
+File: fixed.info, Node: Function Reference, Prev: Example, Up: Top
+
+4 Function Reference
+********************
+
+* Menu:
+
+* concat:: Concatenate two matrices regardless of their type.
+* create_lookup_table:: Creates a lookup table betwen the vectors X and Y.
+* display_fixed_operations:: Displays out a summary of the number of fixed
+ point operations of each type that have been used.
+* fabs:: Compute the magnitude of the fixed point value X.
+* fangle:: See "farg".
+* farg:: Compute the argument of X, defined as THETA = `atan2 (Y,
+ X)' in radians.
+* fatan2:: Compute atan (Y / X) for corresponding fixed point elements
+ of Y and X.
+* fceil:: Return the smallest integer not less than X.
+* fconj:: Returns the conjuate of the fixed point value X.
+* fcos:: Compute the cosine of the fixed point value X.
+* fcosh:: Compute the hyperbolic cosine of the fixed point value X.
+* fcumprod:: Cumulative product of elements along dimension DIM.
+* fcumsum:: Cumulative sum of elements along dimension DIM.
+* fdiag:: Return a diagonal matrix with fixed point vector V on
+ diagonal K.
+* fexp:: Compute the exponential of the fixed point value X.
+* ffft:: Radix-4 fft in floating and fixed point for vectors of
+ length 4^N, where N is an integer.
+* ffloor:: Return the largest integer not greater than X.
+* fifft:: Radix-4 ifft in fixed point for vectors of length 4^N,
+ where.
+* fimag:: Returns the imaginary part of the fixed point value X.
+* fixed:: Used the create a fixed point variable.
+* fixed_inc:: Example code of the use of the fixed point types in an
+ oct-file.
+* fixed_point_count_operations:: Query or set the internal variable
+ `fixed_point_count_operations'.
+* fixed_point_debug:: Query or set the internal variable
+ `fixed_point_debug'.
+* fixed_point_library_version:: A function returning the version number of
+ the fixed point library used.
+* fixed_point_version:: A function returning the version number of the
+ fixed point package used.
+* fixed_point_warn_overflow:: Query or set the internal variable
+ `fixed_point_warn_overflow'.
+* fixedpoint:: Manual and test code for the Octave Fixed Point toolbox.
+* float:: Converts a fixed point object to the equivalent floating
+ point object.
+* flog:: Compute the natural logarithm of the fixed point value X.
+* flog10:: Compute the base-10 logarithm of the fixed point value X.
+* fprod:: Product of elements along dimension DIM.
+* freal:: Returns the real part of the fixed point value X.
+* freshape:: Return a fixed matrix with M rows and N columns whose
+ elements are taken from the fixed matrix A.
+* fround:: Return the rounded value to the nearest integer of X.
+* fsin:: Compute the sine of the fixed point value X.
+* fsinh:: Compute the hyperbolic sine of the fixed point value X.
+* fsort:: Return a copy of the fixed point variable X with the
+ elements arranged in increasing order.
+* fsqrt:: Compute the square-root of the fixed point value X.
+* fsum:: Sum of elements along dimension DIM.
+* fsumsq:: Sum of squares of elements along dimension DIM.
+* ftan:: Compute the tan of the fixed point value X.
+* ftanh:: Compute the hyperbolic tan of the fixed point value X.
+* isfixed:: Return 1 if the value of the expression EXPR is a fixed
+ point value.
+* lookup_table:: Using the lookup table created by "create_lookup_table",
+ find the value Y corresponding to X.
+* reset_fixed_operations:: Reset the count of fixed point operations to
+ zero.
+
+\1f
+File: fixed.info, Node: concat, Next: create_lookup_table, Up: Function Reference
+
+4.0.1 concat
+------------
+
+ -- Function File: X = concat (A, B)
+ -- Function File: X = concat (A, B, DIM)
+ Concatenate two matrices regardless of their type. Due to the
+ implementation of the matrix concatenation in Octave being
+ hard-coded for the types it knowns, user types can not use the
+ matrix concatenation operator. Thus for the _Galois_ and _Fixed
+ Point_ types, the in-built matrix concatenation functions will
+ return a matrix value as their solution
+
+ This function allows these types to be concatenated. If called
+ with a user type that is not known by this function, the in-built
+ concatenate function is used
+
+ If DIM is 1, then the matrices are concatenated, else if DIM is 2,
+ they are stacked
+
+\1f
+File: fixed.info, Node: create_lookup_table, Next: display_fixed_operations, Prev: concat, Up: Function Reference
+
+4.0.2 create_lookup_table
+-------------------------
+
+ -- Function File: TABLE = create_lookup_table (X, Y)
+ Creates a lookup table betwen the vectors X and Y. If X is not in
+ increasing order, the vectors are sorted before being stored
+
+\1f
+File: fixed.info, Node: display_fixed_operations, Next: fabs, Prev: create_lookup_table, Up: Function Reference
+
+4.0.3 display_fixed_operations
+------------------------------
+
+ -- Loadable Function: display_fixed_operations ( )
+ Displays out a summary of the number of fixed point operations of
+ each type that have been used. This can be used to give a estimate
+ of the complexity of an algorithm.
+See also: fixed_point_count_operations, reset_fixed_operations
+
+\1f
+File: fixed.info, Node: fabs, Next: fangle, Prev: display_fixed_operations, Up: Function Reference
+
+4.0.4 fabs
+----------
+
+ -- Loadable Function: Y = fabs (X)
+ Compute the magnitude of the fixed point value X.
+
+\1f
+File: fixed.info, Node: fangle, Next: farg, Prev: fabs, Up: Function Reference
+
+4.0.5 fangle
+------------
+
+ -- Loadable Function: Y = fangle (X)
+ See "farg".
+
+\1f
+File: fixed.info, Node: farg, Next: fatan2, Prev: fangle, Up: Function Reference
+
+4.0.6 farg
+----------
+
+ -- Loadable Function: Y = farg (X)
+ Compute the argument of X, defined as THETA = `atan2 (Y, X)' in
+ radians. For example
+
+ farg (fixed (3,5,3+4i))
+ => 0.90625
+
+\1f
+File: fixed.info, Node: fatan2, Next: fceil, Prev: farg, Up: Function Reference
+
+4.0.7 fatan2
+------------
+
+ -- Loadable Function: fatan2 (Y, X)
+ Compute atan (Y / X) for corresponding fixed point elements of Y
+ and X. The result is in range -pi to pi.
+
+\1f
+File: fixed.info, Node: fceil, Next: fconj, Prev: fatan2, Up: Function Reference
+
+4.0.8 fceil
+-----------
+
+ -- Loadable Function: Y = fceil (X)
+ Return the smallest integer not less than X.
+See also: fround, ffloor
+
+\1f
+File: fixed.info, Node: fconj, Next: fcos, Prev: fceil, Up: Function Reference
+
+4.0.9 fconj
+-----------
+
+ -- Loadable Function: Y = fconj (X)
+ Returns the conjuate of the fixed point value X.
+
+\1f
+File: fixed.info, Node: fcos, Next: fcosh, Prev: fconj, Up: Function Reference
+
+4.0.10 fcos
+-----------
+
+ -- Loadable Function: Y = fcos (X)
+ Compute the cosine of the fixed point value X.
+See also: fcosh, fsin, fsinh, ftan, ftanh
+
+\1f
+File: fixed.info, Node: fcosh, Next: fcumprod, Prev: fcos, Up: Function Reference
+
+4.0.11 fcosh
+------------
+
+ -- Loadable Function: Y = fcosh (X)
+ Compute the hyperbolic cosine of the fixed point value X.
+See also: fcos, fsin, fsinh, ftan, ftanh
+
+\1f
+File: fixed.info, Node: fcumprod, Next: fcumsum, Prev: fcosh, Up: Function Reference
+
+4.0.12 fcumprod
+---------------
+
+ -- Loadable Function: Y = fcumprod (X,DIM)
+ Cumulative product of elements along dimension DIM. If DIM is
+ omitted, it defaults to 1 (column-wise cumulative products).
+See also: fcumsum
+
+\1f
+File: fixed.info, Node: fcumsum, Next: fdiag, Prev: fcumprod, Up: Function Reference
+
+4.0.13 fcumsum
+--------------
+
+ -- Loadable Function: Y = fcumsum (X,DIM)
+ Cumulative sum of elements along dimension DIM. If DIM is
+ omitted, it defaults to 1 (column-wise cumulative sums).
+See also: fcumprod
+
+\1f
+File: fixed.info, Node: fdiag, Next: fexp, Prev: fcumsum, Up: Function Reference
+
+4.0.14 fdiag
+------------
+
+ -- Loadable Function: fdiag (V, K)
+ Return a diagonal matrix with fixed point vector V on diagonal K.
+ The second argument is optional. If it is positive, the vector is
+ placed on the K-th super-diagonal. If it is negative, it is placed
+ on the -K-th sub-diagonal. The default value of K is 0, and the
+ vector is placed on the main diagonal. For example,
+
+ fdiag (fixed(3,2,[1, 2, 3]), 1)
+ ans =
+
+ 0.00 1.00 0.00 0.00
+ 0.00 0.00 2.00 0.00
+ 0.00 0.00 0.00 3.00
+ 0.00 0.00 0.00 0.00
+
+ Note that if all of the elements of the original vector have the
+ same fixed point representation, then the zero elements in the
+ matrix are created with the same representation. Otherwise the
+ zero elements are created with the equivalent of the fixed point
+ value `fixed(0,0,0)'.n
+See also: diag
+
+\1f
+File: fixed.info, Node: fexp, Next: ffft, Prev: fdiag, Up: Function Reference
+
+4.0.15 fexp
+-----------
+
+ -- Loadable Function: Y = fexp (X)
+ Compute the exponential of the fixed point value X.
+See also: log, log10, pow
+
+\1f
+File: fixed.info, Node: ffft, Next: ffloor, Prev: fexp, Up: Function Reference
+
+4.0.16 ffft
+-----------
+
+ -- Loadable Function: Y = ffft (X)
+ Radix-4 fft in floating and fixed point for vectors of length 4^N,
+ where N is an integer. The variable X can be a either a row of
+ column vector, in which case a single fft is carried out over the
+ vector of length 4^N. If X is a matrix, the fft is carried on each
+ column of X and the matrix must contain 4^N rows.
+
+ The radix-4 fft is implemented in a manner that attempts to
+ approximate how it will be implemented in hardware, rather than
+ use a generic butterfly. The radix-4 algorithm is faster and more
+ precise than the equivalent radix-2 algorithm, and thus is
+ preferred for hardware implementation. See also: fifft
+
+\1f
+File: fixed.info, Node: ffloor, Next: fifft, Prev: ffft, Up: Function Reference
+
+4.0.17 ffloor
+-------------
+
+ -- Loadable Function: Y = ffloor (X)
+ Return the largest integer not greater than X.
+See also: fround, fceil
+
+\1f
+File: fixed.info, Node: fifft, Next: fimag, Prev: ffloor, Up: Function Reference
+
+4.0.18 fifft
+------------
+
+ -- Loadable Function: Y = fifft (X)
+ Radix-4 ifft in fixed point for vectors of length 4^N, where. N
+ is an integer. The variable X can be a either a row of column
+ vector, in which case a single ifft is carried out over the vector
+ of length 4^N. If X is a matrix, the ifft is carried on each
+ column of X and the matrix must contain 4^N rows.
+
+ The radix-4 ifft is implemented in a manner that attempts to
+ approximate how it will be implemented in hardware, rather than
+ use a generic butterfly. The radix-4 algorithm is faster and more
+ precise than the equivalent radix-2 algorithm, and thus is
+ preferred for hardware implementation. See also: ffft
+
+\1f
+File: fixed.info, Node: fimag, Next: fixed, Prev: fifft, Up: Function Reference
+
+4.0.19 fimag
+------------
+
+ -- Loadable Function: Y = fimag (X)
+ Returns the imaginary part of the fixed point value X.
+
+\1f
+File: fixed.info, Node: fixed, Next: fixed_inc, Prev: fimag, Up: Function Reference
+
+4.0.20 fixed
+------------
+
+ -- Loadable Function: Y = fixed (F)
+ -- Loadable Function: Y = fixed (IS,DS)
+ -- Loadable Function: Y = fixed (IS,DS,F)
+ Used the create a fixed point variable. Called with a single
+ argument, if F is itself a fixed point value, then "fixed" is
+ equivalent to `Y = F'. Otherwise the integer part of F is used to
+ create a fixed point variable with the minimum number of bits
+ needed to represent it. F can be either real of complex.
+
+ Called with two or more arguments IS represents the number of bits
+ used to represent the integer part of the fixed point numbers, and
+ DS the number used to represent the decimal part. These variables
+ must be either positive integer scalars or matrices. If they are
+ matrices they must be of the same dimension, and each fixed point
+ number in the created matrix will have the representation given by
+ the corresponding values of IS and DS.
+
+ When creating complex fixed point values, the fixed point
+ representation can be different for the real and imaginary parts.
+ In this case IS and DS are complex integers. Additionally the
+ maximum value of the sum of IS and DS is limited by the
+ representation of long integers to either 30 or 62.
+
+ Called with only two arguments, the fixed point variable that is
+ created will contain only zeros. A third argument can be used to
+ give the values of the fixed variables elements. This third
+ argument F can be either a fixed point variable itself, which
+ results in a new fixed point variable being created with a
+ different representation, or a real or complex matrix.
+
+\1f
+File: fixed.info, Node: fixed_inc, Next: fixed_point_count_operations, Prev: fixed, Up: Function Reference
+
+4.0.21 fixed_inc
+----------------
+
+ -- Loadable Function: Y = fixed_inc (X)
+ Example code of the use of the fixed point types in an oct-file.
+ Returns `X + 1'
+
+\1f
+File: fixed.info, Node: fixed_point_count_operations, Next: fixed_point_debug, Prev: fixed_inc, Up: Function Reference
+
+4.0.22 fixed_point_count_operations
+-----------------------------------
+
+ -- Loadable Function: VAL = fixed_point_count_operations ()
+ -- Loadable Function: OLD_VAL = fixed_point_count_operations (NEW_VAL)
+ Query or set the internal variable `fixed_point_count_operations'.
+ If enabled, Octave keeps track of how many times each type of
+ floating point operation has been used internally. This can be
+ used to give an approximation of the algorithms complexity. By
+ default, this feature is disabled. See also:
+ display_fixed_operations
+
+\1f
+File: fixed.info, Node: fixed_point_debug, Next: fixed_point_library_version, Prev: fixed_point_count_operations, Up: Function Reference
+
+4.0.23 fixed_point_debug
+------------------------
+
+ -- Loadable Function: VAL = fixed_point_debug ()
+ -- Loadable Function: OLD_VAL = fixed_point_debug (NEW_VAL)
+ Query or set the internal variable `fixed_point_debug'. If
+ enabled, Octave keeps a copy of the value of fixed point variable
+ internally. This is useful for use with a debug to allow easy
+ access to the variables value. By default this feature is
+ disabled.
+
+\1f
+File: fixed.info, Node: fixed_point_library_version, Next: fixed_point_version, Prev: fixed_point_debug, Up: Function Reference
+
+4.0.24 fixed_point_library_version
+----------------------------------
+
+ -- Loadable Function: fixed_point_library_version ()
+ A function returning the version number of the fixed point library
+ used.
+
+\1f
+File: fixed.info, Node: fixed_point_version, Next: fixed_point_warn_overflow, Prev: fixed_point_library_version, Up: Function Reference
+
+4.0.25 fixed_point_version
+--------------------------
+
+ -- Loadable Function: fixed_point_version ()
+ A function returning the version number of the fixed point package
+ used.
+
+\1f
+File: fixed.info, Node: fixed_point_warn_overflow, Next: fixedpoint, Prev: fixed_point_version, Up: Function Reference
+
+4.0.26 fixed_point_warn_overflow
+--------------------------------
+
+ -- Loadable Function: VAL = fixed_point_warn_overflow ()
+ -- Loadable Function: OLD_VAL = fixed_point_warn_overflow (NEW_VAL)
+ Query or set the internal variable `fixed_point_warn_overflow'.
+ If enabled, Octave warns of overflows in fixed point operations.
+ By default, these warnings are disabled.
+
+\1f
+File: fixed.info, Node: fixedpoint, Next: float, Prev: fixed_point_warn_overflow, Up: Function Reference
+
+4.0.27 fixedpoint
+-----------------
+
+ -- Function File: fixedpoint ('help')
+ -- Function File: fixedpoint ('info')
+ -- Function File: fixedpoint ('info', MOD)
+ -- Function File: fixedpoint ('test')
+ -- Function File: fixedpoint ('test', MOD)
+ Manual and test code for the Octave Fixed Point toolbox. There are
+ 5 possible ways to call this function
+
+ `fixedpoint ('help')'
+ Display this help message. Called with no arguments, this
+ function also displays this help message
+
+ `fixedpoint ('info')'
+ Open the Fixed Point toolbox manual
+
+ `fixedpoint ('info', MOD)'
+ Open the Fixed Point toolbox manual at the section specified
+ by MOD
+
+ `fixedpoint ('test')'
+ Run all of the test code for the Fixed Point toolbox MOD
+
+ Valid values for the varibale MOD are
+
+ 'basics'
+ The section describing the use of the fixed point toolbox
+ within Octave
+
+ 'programming'
+ The section descrining how to use the fixed-point type with
+ oct-files
+
+ 'example'
+ The section describing an in-depth example of the use of the
+ fixed-point type
+
+ 'reference'
+ The refernce section of all of the specific fixed point
+ operators and functions
+
+ Please note that this function file should be used as an example
+ of the use of this toolbox
+
+\1f
+File: fixed.info, Node: float, Next: flog, Prev: fixedpoint, Up: Function Reference
+
+4.0.28 float
+------------
+
+ -- Function File: Y = float (X)
+ Converts a fixed point object to the equivalent floating point
+ object. This is equivalent to `X.x' if `isfixed(X)' returns true,
+ and returns X otherwise
+
+\1f
+File: fixed.info, Node: flog, Next: flog10, Prev: float, Up: Function Reference
+
+4.0.29 flog
+-----------
+
+ -- Loadable Function: Y = flog (X)
+ Compute the natural logarithm of the fixed point value X.
+See also: fexp, flog10, fpow
+
+\1f
+File: fixed.info, Node: flog10, Next: fprod, Prev: flog, Up: Function Reference
+
+4.0.30 flog10
+-------------
+
+ -- Loadable Function: Y = flog10 (X)
+ Compute the base-10 logarithm of the fixed point value X.
+See also: fexp, flog, fpow
+
+\1f
+File: fixed.info, Node: fprod, Next: freal, Prev: flog10, Up: Function Reference
+
+4.0.31 fprod
+------------
+
+ -- Loadable Function: Y = fprod (X,DIM)
+ Product of elements along dimension DIM. If DIM is omitted, it
+ defaults to 1 (column-wise products).
+See also: fsum, fsumsq
+
+\1f
+File: fixed.info, Node: freal, Next: freshape, Prev: fprod, Up: Function Reference
+
+4.0.32 freal
+------------
+
+ -- Loadable Function: Y = freal (X)
+ Returns the real part of the fixed point value X.
+
+\1f
+File: fixed.info, Node: freshape, Next: fround, Prev: freal, Up: Function Reference
+
+4.0.33 freshape
+---------------
+
+ -- Loadable Function: freshape (A, M, N)
+ Return a fixed matrix with M rows and N columns whose elements are
+ taken from the fixed matrix A. To decide how to order the
+ elements, Octave pretends that the elements of a matrix are stored
+ in column-major order (like Fortran arrays are stored).
+
+ For example,
+
+ freshape (fixed(3, 2, [1, 2, 3, 4]), 2, 2)
+ ans =
+
+ 1.00 3.00
+ 2.00 4.00
+
+ If the variable `do_fortran_indexing' is nonzero, the `freshape'
+ function is equivalent to
+
+ retval = fixed(0,0,zeros (m, n));
+ retval (:) = a;
+
+ but it is somewhat less cryptic to use `freshape' instead of the
+ colon operator. Note that the total number of elements in the
+ original matrix must match the total number of elements in the new
+ matrix.
+See also: `:' and do_fortran_indexing
+
+\1f
+File: fixed.info, Node: fround, Next: fsin, Prev: freshape, Up: Function Reference
+
+4.0.34 fround
+-------------
+
+ -- Loadable Function: Y = fround (X)
+ Return the rounded value to the nearest integer of X.
+See also: ffloor, fceil
+
+\1f
+File: fixed.info, Node: fsin, Next: fsinh, Prev: fround, Up: Function Reference
+
+4.0.35 fsin
+-----------
+
+ -- Loadable Function: Y = fsin (X)
+ Compute the sine of the fixed point value X.
+See also: fcos, fcosh, fsinh, ftan, ftanh
+
+\1f
+File: fixed.info, Node: fsinh, Next: fsort, Prev: fsin, Up: Function Reference
+
+4.0.36 fsinh
+------------
+
+ -- Loadable Function: Y = fsinh (X)
+ Compute the hyperbolic sine of the fixed point value X.
+See also: fcos, fcosh, fsin, ftan, ftanh
+
+\1f
+File: fixed.info, Node: fsort, Next: fsqrt, Prev: fsinh, Up: Function Reference
+
+4.0.37 fsort
+------------
+
+ -- Function File: [S, I] = fsort (X)
+ Return a copy of the fixed point variable X with the elements
+ arranged in increasing order. For matrices, `fsort' orders the
+ elements in each column
+
+ For example,
+
+ fsort (fixed(4,0,[1, 2; 2, 3; 3, 1]))
+ => 1 1
+ 2 2
+ 3 3
+
+ The `fsort' function may also be used to produce a matrix
+ containing the original row indices of the elements in the sorted
+ matrix. For example,
+
+ [s, i] = sort ([1, 2; 2, 3; 3, 1])
+ => s = 1 1
+ 2 2
+ 3 3
+ => i = 1 3
+ 2 1
+ 3 2
+
+\1f
+File: fixed.info, Node: fsqrt, Next: fsum, Prev: fsort, Up: Function Reference
+
+4.0.38 fsqrt
+------------
+
+ -- Loadable Function: Y = fsqrt (X)
+ Compute the square-root of the fixed point value X.
+
+\1f
+File: fixed.info, Node: fsum, Next: fsumsq, Prev: fsqrt, Up: Function Reference
+
+4.0.39 fsum
+-----------
+
+ -- Loadable Function: Y = fsum (X,DIM)
+ Sum of elements along dimension DIM. If DIM is omitted, it
+ defaults to 1 (column-wise sum).
+See also: fprod, fsumsq
+
+\1f
+File: fixed.info, Node: fsumsq, Next: ftan, Prev: fsum, Up: Function Reference
+
+4.0.40 fsumsq
+-------------
+
+ -- Loadable Function: Y = fsumsq (X,DIM)
+ Sum of squares of elements along dimension DIM. If DIM is
+ omitted, it defaults to 1 (column-wise sum of squares). This
+ function is equivalent to computing
+ fsum (x .* fconj (x), dim)
+ but it uses less memory and avoids calling `fconj' if X is real.
+See also: fprod, fsum
+
+\1f
+File: fixed.info, Node: ftan, Next: ftanh, Prev: fsumsq, Up: Function Reference
+
+4.0.41 ftan
+-----------
+
+ -- Loadable Function: Y = ftan (X)
+ Compute the tan of the fixed point value X.
+See also: fcos, fcosh, fsinh, ftan, ftanh
+
+\1f
+File: fixed.info, Node: ftanh, Next: isfixed, Prev: ftan, Up: Function Reference
+
+4.0.42 ftanh
+------------
+
+ -- Loadable Function: Y = ftanh (X)
+ Compute the hyperbolic tan of the fixed point value X.
+See also: fcos, fcosh, fsin, fsinh, ftan
+
+\1f
+File: fixed.info, Node: isfixed, Next: lookup_table, Prev: ftanh, Up: Function Reference
+
+4.0.43 isfixed
+--------------
+
+ -- Loadable Function: isfixed (EXPR)
+ Return 1 if the value of the expression EXPR is a fixed point
+ value.
+
+\1f
+File: fixed.info, Node: lookup_table, Next: reset_fixed_operations, Prev: isfixed, Up: Function Reference
+
+4.0.44 lookup_table
+-------------------
+
+ -- Function File: Y = lookup_table (TABLE, X)
+ -- Function File: Y = lookup_table (TABLE, X, INTERP, EXTRAP)
+ Using the lookup table created by "create_lookup_table", find the
+ value Y corresponding to X. With two arguments the lookup is done
+ to the nearest value below in the table less than the desired
+ value. With three arguments a simple linear interpolation is
+ performed. With four arguments an extrapolation is also performed.
+ The exact values of arguments three and four are irrelevant, as
+ only there presence detremines whether interpolation and/or
+ extrapolation are used
+
+\1f
+File: fixed.info, Node: reset_fixed_operations, Prev: lookup_table, Up: Function Reference
+
+4.0.45 reset_fixed_operations
+-----------------------------
+
+ -- Loadable Function: reset_fixed_operations ( )
+ Reset the count of fixed point operations to zero.
+See also: fixed_point_count_operations, display_fixed_operations
+
+
+\1f
+Tag Table:
+Node: Top\7f0
+Node: Basics\7f451
+Node: License\7f2189
+Node: Representation\7f3637
+Node: Creation\7f5758
+Node: Overflow\7f10324
+Node: Built-in Variables\7f12463
+Node: Accessing Internal Fields\7f15016
+Node: Function Overloading\7f17290
+Node: Together\7f19419
+Node: Precision\7f21133
+Node: Lookup Tables\7f22801
+Node: Known Problems\7f24895
+Node: Programming\7f30612
+Node: FixedPoint\7f32047
+Node: FPConstructors\7f32393
+Node: FPSpecific\7f34500
+Node: FPOperators\7f38437
+Node: FPFunctions\7f42058
+Node: FixedPointComplex\7f44635
+Node: FPCConstructors\7f45488
+Node: FPCSpecific\7f53798
+Node: FPCOperators\7f59333
+Node: FPCFunctions\7f61802
+Node: Derived\7f65276
+Node: FixedMatrix\7f67221
+Node: FixedRowVector\7f73874
+Node: FixedColumnVector\7f80858
+Node: FixedComplexMatrix\7f88161
+Node: FixedComplexRowVector\7f99293
+Node: FixedComplexColumnVector\7f111035
+Node: Upper\7f123337
+Node: Oct-files\7f125003
+Node: Templates\7f125932
+Node: Problems\7f127400
+Node: Cygwin\7f129334
+Node: OctExample\7f130559
+Node: Example\7f133601
+Node: Function Reference\7f138734
+Node: concat\7f142156
+Node: create_lookup_table\7f143001
+Node: display_fixed_operations\7f143367
+Node: fabs\7f143849
+Node: fangle\7f144070
+Node: farg\7f144239
+Node: fatan2\7f144545
+Node: fceil\7f144815
+Node: fconj\7f145041
+Node: fcos\7f145244
+Node: fcosh\7f145486
+Node: fcumprod\7f145744
+Node: fcumsum\7f146066
+Node: fdiag\7f146378
+Node: fexp\7f147393
+Node: ffft\7f147623
+Node: ffloor\7f148441
+Node: fifft\7f148672
+Node: fimag\7f149487
+Node: fixed\7f149699
+Node: fixed_inc\7f151463
+Node: fixed_point_count_operations\7f151745
+Node: fixed_point_debug\7f152436
+Node: fixed_point_library_version\7f153025
+Node: fixed_point_version\7f153370
+Node: fixed_point_warn_overflow\7f153699
+Node: fixedpoint\7f154205
+Node: float\7f155705
+Node: flog\7f156025
+Node: flog10\7f156266
+Node: fprod\7f156511
+Node: freal\7f156803
+Node: freshape\7f157013
+Node: fround\7f158021
+Node: fsin\7f158262
+Node: fsinh\7f158503
+Node: fsort\7f158756
+Node: fsqrt\7f159503
+Node: fsum\7f159711
+Node: fsumsq\7f159991
+Node: ftan\7f160450
+Node: ftanh\7f160690
+Node: isfixed\7f160944
+Node: lookup_table\7f161190
+Node: reset_fixed_operations\7f161964
+\1f
+End Tag Table