File CNC.ZIP from The Programmer’s Corner in
Category Science and Education
Complex Number Calculator Ver. 1.0: evaluates expressions containing real or complex numbers.
File Name File Size Zip Size Zip Type
CNC.DOC 10551 4231 deflated
CNC.EXE 81060 36246 deflated

## Contents of the CNC.DOC file

Complex Number Calculator version 1.0 by Robert G. Kaires on 3/24/90

SHAREWARE

If you find this program useful, please register. Registration is only \$15.
Your payment is appreciated and necessary for the continued support and
upgrade of this product. If you register you will be put on the mailing list

Robert G. Kaires
609 Glover Dr.
Runnemede, NJ 08078

INCLUDE A SELF-ADDRESSED, STAMPED ENVELOPE IF YOU WANT A REPLY AND ARE NOT A
REGISTERED USER.

Anyone wishing a disk mailed to them with the latest version of this program
send \$5 to the above address requesting a copy of CNC (you do not have to
be a registered user).

Other shareware products from R.G.Kaires

Function Plotter 4.0, (plots functions and data) registration \$20, disk \$5

PRELIMINARY

The symbol "i" is used to denote the unit imaginary constant and is equal to
the square root of -1. The symbol "z" denotes a complex variable and
z(t) = x(t) + i * y(t). As you can see x(t) is the real part, and y(t) is the
complex part of the complex number, respectively. The symbol "t" is used to
denote a real parameter and will be useful in the discussion of numerical
integration.

INTRODUCTION

Complex Number Calculator (CNC) evaluates expressions containing real or
complex numbers. Examples of valid expressions are:

1.23e10/.45e-27 ............. numbers can be entered in exponential format
1 + sin(pi/3) ............... same as 1 + sin(180/3) if "degrees" are set
exp( 2 - (1/2) * exp(3) ) ... functions can, of course, be nested
.5 * ln( (1+z)/(1-z) ) ...... you will be prompted for z
(i+1)/(i-1) ................. "i" is the unit imaginary constant
(z+1)/(z-1) ................. enter any real or complex no. at the prompt
(1+i)^(2+i) ................. exponents can be complex
int( 1 / (1+t^2), 4,0,1) .... numerically integrate f(t) = 1 / ( 1+t^2 )
from 0 to 1 using an approx order of 4
int(cos(t)+j*sin(t),4,0,pi).. numerically integrate cos(t) + i * sin(t)
M_m(2.0) .................... convert 2 miles to meters
kW_hp(4.5) .................. convert 4.5 kilo-Watts to horse power

See the end of this document for a full list of functions, constants, and
conversions available in CNC. Be aware that CNC is case sensitive.

CNC "remembers" previously entered expressions (up to 20), they can be
accessed by using the up and down arrow keys. Expressions can be one full line
in length. When the line is full, CNC will not allow any addition characters
to be inserted until some are deleted. All calculations are performed in
double precision with about 15 significant digits of precision. The number of
displayed digits (default is 6) can be changed using the "dd" command.
When responding to prompts in CNC, the default response is given in square
brackets. Simply hit "Enter" (CR) to respond with the default.

At the top of the screen is a message line which lists some information on
valid editing keys and other commands. At the bottom of the screen is the
status line.

OPERATORS, FUNCTIONS AND PRECEDENCE

The valid operators are + - * / ^. The operator ^ (exponentiation) has the
highest precedence, followed by the operators * and / which have equal
precedence, followed by + and - which have equal precedence. Operators with
equal precedence are evaluated left to right. Functions (and conversions) have
higher precedence than operators. Therefore sin(pi/6)^2 is evaluated as
(sin(pi/6) )^2 since sin(pi/6) is evaluated before the exponentiation is
performed. Consider the following two expressions:

sin(5) ^ sqrt(2) and
sin(5) ^ 2^.5

The first yields: (-.958924) ^ 1.41421 ( = -0.250921 - i * 0.90839 )
The second gives: ( (-.958924) ^ 2 ) ^ .5 ( = .958924 )

In the first expression sqrt (which IS a function) and sin are evaluated
first, in the second expression sin is evaluated, followed by the operators ^
and ^, which are evaluated left to right. Enough said. As when using any
calculator, when in doubt, use parenthesis. One final note: do not use
operators side by side with no intervening numbers or parenthesis such as
2*-2, you will be surprised at what you get. Instead use 2*(-2)

PRECISION, ROUND OFF ERROR, MIN AND MAX NUMBERS

All calculations are done in double precision and have about 15 digits of
accuracy. Problems that can occur from this finite accuracy are best
illustrated by the following example session:

>sin(z)^2 + cos(z)^2 ...... (user enters expres at > prompt)
z=?>1 ..................... (user enters expres at z=?> prompt)
1 ......................... (result)
z=?>10
1
z=?>100
1
z=?>i ..................... (of course you may use complex
1 numbers as well)
z=?>10*i
1
z=?>100*i ................. (WHAT HAPPENED HERE!)
6.90175e+71

This last result is not a bug in CNC! It results because of the finite
precision of this (and any) calculator. The functions sin(z)^2 and cos(z)^2
with purely imaginary arguments are -sinh(y)^2 and cosh(y)^2, respectively.
Now the answer is obvious, for large y we are subtracting two very large
numbers. The answer, of course, becomes very inaccurate.

Floating point numbers can range from 1e-308 to 1e308.

FUNCTIONS

sqrt() square root function
exp() inverse natural log function
real() real part of a complex number
imag() imaginary part of a complex number
mag() magnitude of a complex number
ang() angle of a complex number
ln() natural log
log() log base 10

sin(), cos(), tan() trigonometric functions
asin(), acos(), atan() inverse trigonometric functions
sinh(), cosh(), tanh() hyperbolic functions
asinh(), acosh(), atanh() inverse hyperbolic functions

INTEGRATION FUNCTION

int( f(t),N,l,u ) numerical integration of a function of a single real
- f(t) can evaluate to a complex number
- N is the order of the approximation ( 2,4,8,10,12,16,32 )
- l,u lower and upper integration limits (can be a function of T)

The integration method used is Gaussian Quadrature. The numerical procedure
does not put integration points at the integration limits. Therefore the
integration limit points can be singular. Of course, one must be concerned
about convergence. Some singularities are integrable, some are not. Consider
the following two sessions. In both the function is singular at t=0, but the
first function is integrable and the second is not.

>int(ln(t),8,0,1) ......... The ln function is integrable
-0.991239 from 0 to 1
>int(ln(t),16,0,1)
-0.997679
>int(ln(t),32,0,1)
-0.999402

>int(1/t,8,0,1) ............The 1/t function in not integrable
5.43571 from 0 to 1
>int(1/t,16,0,1)
6.76146
>int(1/t,32,0,1)
8.11699

We notice that the first integral converges but that the second does not.

INTEGRATION IN THE COMPLEX PLANE

Integrating a function of a complex variable in the complex plane is possible
with some work. The function must be parameterized as a function of a real
variable as follows: f(z) = f(x+i*y) = f(x(t) + i*y(t)), where t is real.
We then note that dz = ( x'(t) + i*y'(t) ) dt, where ' denote differentiation
with respect to t. Therefore we have

f(z) dz = f( x(t) + i*y(t) ) * ( x'(t) + i*y'(t) ) dt.

Example: We want to integrate 1/z along the unit circle centered at the
origin. The complex variable z can be described by z = cos(t) + i * sin(t).
Therefore we have

1/z dz = ( 1 / (cos(t) + i * sin(t) ) * ( -sin(t) + i*cos(t) ) dt.

The following is from an actual session:

>int( ( 1 / (cos(t) + i * sin(t) ) ) * ( -sin(t) + i*cos(t) ),4,0,2*pi)
3.73223e-18 + i * 6.28319

With the exception of some small round-off error, we obtain approximately
2*pi*i as expected.

BUILT IN CONSTANTS

mathematical constants: pi (3.14159...) gamma (.5772...)

physical constants:

c0 speed of light in vacuum (m/s) N Avagadro's constant (1/mole)
h Planck's constant (J-s) R Universal gas constant (J/K-mole)
qe electron charge (C) k Boltzmann's constant (J/K)
eps permittivity constant (F/m) Me electron mass (kg)
mu permeability constant (H/m) Mn neutron mass (kg)
G Grav constant (N-m^2/kg^2) Mp proton mass (kg)
g standard gravity (m/s^2)

CONVERSION FUNCTIONS (must use real arguments)

M_m(), m_M() miles to meters, meters to miles
M_yd(), yd_M() miles to yards, yards to miles
M_ft(), ft_M() miles to feet, ....
m_in(), in_ft() meters to inches, ....
cm_in(), in_cm() cm to inches, ....
F_C(), C_F() degrees Fahrenheit to degrees Celsius, ....
K_C(), C_K() degrees Kelvin to degrees Celsius, ....
K_F(), F_K() degrees Kelvin to degrees Fahrenheit, ....
lb_kg(), kg_lb() pounds to kilograms, .... (under standard gravity)
lb_N(), N_lb() pounds to Newtons, ....
Btu_J(), J_Btu() Btu's to Joules, ....
kWh_J(), J_kWh() kilo-Watt hours to Joules, ....
kW_hp(), hp_kW() kilo-Watt hours to horse-power, ....

FILES

You can write data to a file only from the z=?> (or T=?>) prompt. Enter a
function of z, at the z=?> prompt press f , you will be prompted for a
file name and whether you want to write the domain and range or just the
range. If you request the domain and range to be written, the real part of z
will be written to the first column, the imaginary part of z to the second
column, the real part of f(z) to the third column and finally the imaginary
part of f(z) to the fourth column. If you request the range (only) to be
written, the real and imaginary parts of f(z) will be written to the first and
second columns, respectively. The file will be close when you press "q" from
the z=?> (or T=?>) prompt. You can plot your data with any standard plotting
package. A shareware plotting package is available from this author if you are
in need (see beginning of this document).

December 15, 2017