

         RealFun:  Real & Complex Math Libraries for QuickBASIC

         MANUAL.TXT



           RealFun & CompFun:  Mathematics Libraries for QuickBASIC

                       Copyright 1991, L. Kerry Mitchell





         Contents: I.   Introduction

                   II.  RealFun Libraries

                   III. CompFun Libraries

                   IV.  Support Policy

                   V.   General Comments

                   VI.  Revision History





         I.   Introduction



         One of the nice things about BASIC is that it's an easy

         language to learn and use, especially in the QuickBASIC

         environment.  However, this ease of use comes at the expense

         of programming power.  As it is packaged, QuickBASIC just

         doesn't have the same number-crunching capability as

         FORTRAN, for example.  In much of my personal programming, I

         wanted to use functions, like hyperbolic trigonometric

         functions, that were available in FORTRAN.  The essential

         pieces were there (arithmetic operators and the EXP

         function), but not in the forms I wanted.  So I set out to

         create a set of libraries that would contain all the

         functions I'd ever want to use, and then some.



         Along the way, I realized that some of the intrinsic

         functions in QuickBASIC don't quite function the way I'd

         like.  For example, the modulo function (MOD) only returns

         integers, which is not helpful if you're trying to find 1000

         mod 3.14159.  The arctangent function (ATN) only takes one

         argument, so you can't tell what quadrant your angle is in. 

         Specifically, if the sides of your angle are x and y, with x

         = -1 and y = -1, ATN(y/x) will give you the same result as

         it would if x and y were both 1.  And of course, QuickBASIC

         does not handle complex numbers (as such).



         This package is a compilation of my efforts to make

         QuickBASIC more powerful and more productive.  I hope you

         find it useful.





         II.  RealFun Libraries



         The RealFun library is actually two libraries, a Quick

         library (REALFUN.QLB) that is used during your interactive


         programming session, and a stand-alone library (REALFUN.LIB)

         that is used to create stand-alone programs.  To use them,

         initiate QuickBASIC with the "/l" option:



              C> qb/l realfun



         This assumes that you keep RealFun in the same directory as

         your QuickBASIC executable files.  For additional

         information on loading libraries, see your QuickBASIC

         manuals.



         Once you've gotten the library loaded, you need to tell your

         program about it.  For each function that you use, you need

         a declaration statement at the beginning of your code.  For

         example, to use the sind (sine of an angle in degrees)

         function, you would need a



              DECLARE FUNCTION sind (x)



         at the beginning of your program.  Then, if you wanted to

         find the sine of 35 degrees somewhere later, call the sind

         function just as you would the intrinsic SIN function:



              .

              .

              .

              s35 = sind(35)

              .

              .

              .



         All the other functions are similarly available for your

         use.



         RealFun is composed of 38 functions.  A full list of them by

         general topic area (sine, hyperbolic tangent, modulo, etc.)

         can be found in the file REALTOP.TXT.  An alphabetic listing

         by function name (sind, tanh, dmod, etc.) can be found in

         the file REALLIST.TXT.  That's all there is to it!





         III. CompFun Libraries



         The CompFun libraries are also two libraries, a Quick

         library (COMPFUN.QLB) that is used during your interactive

         programming session, and a stand-alone library (COMPFUN.LIB)

         that is used to create stand-alone programs.  To use them,

         initiate QuickBASIC with the "/l" option:



              C> qb/l compfun




         just like intializing the RealFun libraries.



         The CompFun library is a superset of the functions included

         in RealFun, and is composed of FUNCTIONS and SUBprograms. 

         To use the FUNCTIONs, you need to let your program know

         about them, with the appropriate declaration(s).  For

         example, to use the amax and amin functions (maximum and

         minimum of 2 items in a list), you would need



              DECLARE FUNCTION amax (x, y)

              DECLARE FUNCTION amin (x, y)



         at the beginning of your program.



         The strength of CompFun lies in its ability to manipulate

         complex numbers via their real and imaginary parts.  (In

         brief, complex numbers have 2 parts, that are known as the

         "real" and "imaginary" parts.  QuickBASIC can only handle

         "real" numbers, that is, numbers with 1 part.  See

         REGISTER.TXT for information regarding a tutorial on complex

         numbers and using them with the CompFun library.)  Since

         FUNCTIONs only return 1 number, the complex routines are

         executed using SUBprograms, which support parameter lists. 

         Each SUBprogram you want to use requires its own declaration

         statement.  For example, to convert the real and imaginary

         parts of a complex number to its magnitude and phase, use



              DECLARE SUB cpolar (x, y, r, t)



         at the beginning of your program, and



              CALL cpolar (a, b, mag, phase)



         in the body of your code.  Of course, you don't have to use

         these same variables names, as long as they are of the

         proper type.  In this example, the inputs are a (the real

         part of the complex number) and b (the imaginary part).  The

         outputs are mag (the magnitude) and phase (the phase, in

         radians).  The file COMPTOP.TXT lists all the FUNCTIONs and

         SUBprograms in CompFun, arranged by topic.  Also listed are

         the input and output types (single- or double-precision,

         integer or long), and the number of arguments.  An

         alphabetic listing of all the routines can be found in

         COMPLIST.TXT.



         A bit of warning about dealing with complex numbers:  Any

         function involving the trigonometric functions (sin, cos,

         tan, sinh, cosh, tanh) or the exponentials (exp, log), the

         so-called "transcendental" functions, will be multi-valued. 


         That is to say, there is an infinity of numbers that give

         the same answer.  This is not really a problem, but

         something of which you need to be aware.  For example, if

         you computed the cosine and arccosine of (-1, -3):



              DECLARE SUB ccos(a, b, c, d)

              DECLARE SUB cacos(a, b, c, d)

              CALL ccos(-1, -3, u, v)

              CALL cacos(u, v, x, y)

              PRINT x, y



         you'd find that x = 1 and y = 3, rather than -1 and -3.  So

         computing the inverse of a function does not necessarily get

         you right back where you started.





         IV.  General Comments



         The limits of these libraries are the same as the limits of

         QuickBASIC, as far as precision, overflow, underflow, etc.



         It is assumed that the user has some idea of what he/she is

         doing, or doesn't mind crashing his/her program often.  That

         is to say that there is no error-checking in the routines. 

         If you try to compute cdacos(145%), your program will

         probably die.  I decided that QuickBASIC's error-checking

         facilities were good enough to keep your machine from

         hanging up, and that checking for the more common errors

         would amount to excessive overhead and adversely affect the

         routines' performance.



         Some of the calculations, especially the inverse

         trigonometric functions, are a bit involved.  A lot of

         effort has gone into optimizing the algorithms, but it can

         still take a long time to do a massive calculation (like a

         640 x 480, several thousand iteration fractal).  There's not

         much that can be done about that; it's the nature of the

         system.





         V.   Support Policy



         It is expected that the user of this package will have at

         least a passing familiarity with QuickBASIC and the

         mathematics used in the libraries.  For a tutorial on

         complex numbers and usage of the libraries, please see

         REGISTER.TXT and order the enhanced package.



         These libraries have been tested thoroughly, but on only one

         installation.  The modules are believed to be fully


         compatible with MS-DOS 3.3 and QuickBASIC 4.5. 

         Compatibility with earlier versions is an open question,

         although no "tricks" or dirty programming have been used, so

         it should be safe.  To report bugs and problems, please send

         a short note to me at the address below.



         Support in working with the package can be obtained in two

         ways.  For 90 days after registration, you are entitled to a

         total of 1 hour telephone support, free of charge (except

         normal long-distance charges).  Support by mail (postal or

         electronic) is available free of charge for 180 days after

         registration.  To obtain help or report a bug, write or

         call:



              Kerry Mitchell

              Creative Imagery

              1454 Todds Lane #A-25

              Hampton, VA 23666

              804-827-7034

              CompuServe:  [70152,1444]

              Internet:  70152.1444@compuserve.com

              Delphi:  lkmitch





         VI.  Revision History



         This is officially version 1.0 of the RealFun package.  A

         preliminary version was released in 1990, primarily as an

         exercise for myself.

