cx.htm

来自「VC环境下的实用的复数库函数,编译后可作为库函数使用.」· HTM 代码 · 共 1,330 行 · 第 1/3 页

HTM
1,330
字号
from round-off error). For example, you cannot convert <i>Polar</i> to <i>Imag</i>.</p>

<p>I return void from the = operation so you can't do <i>a</i> = <i>b</i> = <i>c</i>;
.</p>

<h2><a name="Binary"></a>Binary functions</h2>
<h3><a name="Additive"></a>Additive</h3>
<table border="1" cellspacing="0" width="100%" cellpadding="2">
  <tr>
    <td width="20%"><TT>+</TT>, <TT>-</TT></td>
    <td width="80%" colspan="5" align="center">
      <i>Second Argument</i></td>
  </tr>
  <tr>
    <td width="20%"><i>First Argument</i></td>
    <td width="16%"><b>CX</b></td>
    <td width="16%"><b>Real</b></td>
    <td width="16%"><b>Imag</b></td>
    <td width="16%"><b>_I_</b></td>
    <td width="16%"><b>Polar</b></td>
  </tr>
  <tr>
    <td width="20%"><b>CX</b></td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
  </tr>
  <tr>
    <td width="20%"><b>Real</b></td>
    <td width="16%">CX</td>
    <td width="16%">(Real)</td>
    <td width="16%">Imag</td>
    <td width="16%">Imag</td>
    <td width="16%">CX</td>
  </tr>
  <tr>
    <td width="20%"><b>Imag</b></td>
    <td width="16%">CX</td>
    <td width="16%">Imag</td>
    <td width="16%">Imag</td>
    <td width="16%">Imag</td>
    <td width="16%">CX</td>
  </tr>
  <tr>
    <td width="20%"><b>_I_</b></td>
    <td width="16%">CX</td>
    <td width="16%">Imag</td>
    <td width="16%">Imag</td>
    <td width="16%">Imag, Real</td>
    <td width="16%">CX</td>
  </tr>
  <tr>
    <td width="20%"><b>Polar</b></td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
  </tr>
</table>
<p>When additions or subtractions involve <i> Polar</i> the Polar number is converted to
<i>
CX</i> and a <i> CX</i> addition or subtraction performed.</p>
<h3><a name="Multiplicative"></a>Multiplicative</h3>
<table border="1" cellspacing="0" width="100%" cellpadding="2">
  <tr>
    <td width="20%"><TT>*</TT>, <TT>/</TT></td>
    <td width="80%" colspan="5" align="center">
      <i>Second Argument</i></td>
  </tr>
  <tr>
    <td width="20%"><i>First Argument</i></td>
    <td width="16%"><b>CX</b></td>
    <td width="16%"><b>Real</b></td>
    <td width="16%"><b>Imag</b></td>
    <td width="16%"><b>_I_</b></td>
    <td width="16%"><b>Polar</b></td>
  </tr>
  <tr>
    <td width="20%"><b>CX</b></td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%"><i>illegal</i></td>
  </tr>
  <tr>
    <td width="20%"><b>Real</b></td>
    <td width="16%">CX</td>
    <td width="16%">(Real)</td>
    <td width="16%">Imag</td>
    <td width="16%">Imag</td>
    <td width="16%">Polar</td>
  </tr>
  <tr>
    <td width="20%"><b>Imag</b></td>
    <td width="16%">CX</td>
    <td width="16%">Imag</td>
    <td width="16%">Real</td>
    <td width="16%">Real</td>
    <td width="16%">Polar</td>
  </tr>
  <tr>
    <td width="20%"><b>_I_</b></td>
    <td width="16%">CX</td>
    <td width="16%">Imag</td>
    <td width="16%">Real</td>
    <td width="16%">Real</td>
    <td width="16%">Polar</td>
  </tr>
  <tr>
    <td width="20%"><b>Polar</b></td>
    <td width="16%"><i>illegal</i></td>
    <td width="16%">Polar</td>
    <td width="16%">Polar</td>
    <td width="16%">Polar</td>
    <td width="16%">Polar</td>
  </tr>
</table>
<p>Multiplication of a <i>CX</i> variable with a <i>Polar</i> variable will
result in a compile error. Either convert the <i>CX</i> variable to <i>Polar</i>,
if you want a <i>Polar</i> result or the <i>Polar</i> variable to <i>CX</i> if
you want a <i>CX</i> result.</p>

<h3><a name="AdditiveSelf"></a>Additive to self</h3>

<table border="1" cellspacing="0" width="100%" cellpadding="2">
  <tr>
    <td width="20%"><TT>+=</TT>, <TT>-=</TT></td>
    <td width="80%" colspan="5" align="center">
      <i> Argument</i></td>
  </tr>
  <tr>
    <td width="20%"><i>Class</i></td>
    <td width="16%"><b>CX</b></td>
    <td width="16%"><b>Real</b></td>
    <td width="16%"><b>Imag</b></td>
    <td width="16%"><b>_I_</b></td>
    <td width="16%"><b>Polar</b></td>
  </tr>
  <tr>
    <td width="20%"><b>CX</b></td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
  </tr>
  <tr>
    <td width="20%"><b>Real</b></td>
    <td width="16%">&nbsp;</td>
    <td width="16%">(Yes)</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>Imag</b></td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>_I_</b></td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>Polar</b></td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
  </tr>
</table>

<h3><a name="MultiplicativeSelf"></a>Multiplicative to self</h3>

<table border="1" cellspacing="0" width="100%" cellpadding="2">
  <tr>
    <td width="20%"><tt>*=</tt>, <TT>/=</TT></td>
    <td width="80%" colspan="5" align="center">
      <i>Argument</i></td>
  </tr>
  <tr>
    <td width="20%"><i>Class</i></td>
    <td width="16%"><b>CX</b></td>
    <td width="16%"><b>Real</b></td>
    <td width="16%"><b>Imag</b></td>
    <td width="16%"><b>_I_</b></td>
    <td width="16%"><b>Polar</b></td>
  </tr>
  <tr>
    <td width="20%"><b>CX</b></td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
  </tr>
  <tr>
    <td width="20%"><b>Real</b></td>
    <td width="16%">&nbsp;</td>
    <td width="16%">(Yes)</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>Imag</b></td>
    <td width="16%">&nbsp;</td>
    <td width="16%">Yes</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>_I_</b></td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>Polar</b></td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
    <td width="16%">Yes</td>
  </tr>
</table>

<h3><a name="Equality"></a>Equality</h3>

<table border="1" cellspacing="0" width="100%" cellpadding="2">
  <tr>
    <td width="20%"><TT>==</TT>, <TT>!=</TT></td>
    <td width="80%" colspan="5" align="center">
      <i>Second Argument</i></td>
  </tr>
  <tr>
    <td width="20%"><i>First Argument</i></td>
    <td width="16%"><b>CX</b></td>
    <td width="16%"><b>Real</b></td>
    <td width="16%"><b>Imag</b></td>
    <td width="16%"><b>_I_</b></td>
    <td width="16%"><b>Polar</b></td>
  </tr>
  <tr>
    <td width="20%"><b>CX</b></td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
    <td width="16%"><i>illegal</i></td>
  </tr>
  <tr>
    <td width="20%"><b>Real</b></td>
    <td width="16%">bool</td>
    <td width="16%">(bool)</td>
    <td width="16%">bool</td>
    <td width="16%"><b>false</b></td>
    <td width="16%">bool</td>
  </tr>
  <tr>
    <td width="20%"><b>Imag</b></td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
  </tr>
  <tr>
    <td width="20%"><b>_I_</b></td>
    <td width="16%">bool</td>
    <td width="16%"><b>false</b></td>
    <td width="16%">bool</td>
    <td width="16%"><b>true</b></td>
    <td width="16%">bool</td>
  </tr>
  <tr>
    <td width="20%"><b>Polar</b></td>
    <td width="16%"><i>illegal</i></td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
    <td width="16%">bool</td>
  </tr>
</table>
<p>Remember that, because of round-off error, testing equality of floating point
variables is not very useful unless the variables involved have values that can
be represented exactly as binary numbers or might be equal because one is a copy
of the other.</p>

<h3><a name="Power"></a>Power</h3>

<table border="1" cellspacing="0" width="100%" cellpadding="2">
  <tr>
    <td width="20%">pow</td>
    <td width="80%" colspan="5" align="center">
      <i>Second Argument</i></td>
  </tr>
  <tr>
    <td width="20%"><i>First Argument</i></td>
    <td width="16%"><b>CX</b></td>
    <td width="16%"><b>Real, int</b></td>
    <td width="16%"><b>Imag</b></td>
    <td width="16%"><b>_I_</b></td>
    <td width="16%"><b>Polar</b></td>
  </tr>
  <tr>
    <td width="20%"><b>CX</b></td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>Real</b></td>
    <td width="16%">CX</td>
    <td width="16%">(Real)</td>
    <td width="16%">CX</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>Imag</b></td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">CX</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>_I_</b></td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
  <tr>
    <td width="20%"><b>Polar</b></td>
    <td width="16%">Polar</td>
    <td width="16%">Polar</td>
    <td width="16%">Polar</td>
    <td width="16%">&nbsp;</td>
    <td width="16%">&nbsp;</td>
  </tr>
</table>

<p>If <i>y</i> is of type <i>int</i> and in the range -12 to 12 then <i>pow(x,y)</i> is
calculated by direct multiplication. In all other cases it is calculated with <i>exp(y *
log(x))</i>.</p>

<p>Value of <i>pow(x,y)</i>  if <i>x</i> is zero:</p>

<table border="1" cellspacing="0" width="100%" cellpadding="2">
  <tr>
    <td width="15%"><b><i>x</i></b></td>
    <td width="45%"><b><i>y</i></b></td>
    <td width="40%"><b><i>pow(x,y)</i></b></td>
  </tr>
  <tr>
    <td width="15%">0</td>
    <td width="45%"><i>int</i> and negative</td>
    <td width="40%">throw exception</td>
  </tr>
  <tr>
    <td width="15%">0</td>
    <td width="45%"><i>int</i> and non-negative</td>
    <td width="40%">0</td>
  </tr>
  <tr>
    <td width="15%">0</td>
    <td width="45%">not <i>int</i> and non-positive real part</td>
    <td width="40%">throw exception</td>
  </tr>
  <tr>
    <td width="15%">0</td>
    <td width="45%">not <i>int</i> and positive real part</td>
    <td width="40%">0</td>
  </tr>
</table>

<p>Make sure you understand what you are doing if you use <i>pow(x,y)</i> with
complex <i>y</i>.</p>

<h2><a name="input"></a>Input and output</h2>

<p>I have not defined input and output functions.</p>

<h2><a name="GlobVarFn"></a>Global variables, functions</h2>
<pre>   Real pi, pi_times_2, pi_over_2, pi_over_4

   Real ipow(Real x, int n)</pre>
<pre>   ImaginaryUnit _I_</pre>
<p>The variables <i>pi</i>, <i>pi_times_2</i>, <i>pi_over_2</i>, <i> pi_over_4</i>
have the obvious values.</p>
<p>The global variable <i>_I_</i> is the representation of <i>i</i> = sqrt(-1).</p>
<p>The function <i>ipow</i> is <i>pow</i> with integer second argument, <i>n</i>.
If <i>n</i> is in the range -12 to 12 the value is calculated by multiplication.
An version of <i>pow</i> with integer argument is included in the new standard
but is not in all compilers.</p>

<h2><a name="example"></a>Mandelbrot set example</h2>

<p>The example calculates what is essentially the boundary of the Mandelbrot set
using contour integration. Details are given in the program file. The program
outputs the coordinates of the points on the boundary. Here is an
Excel scatter plot of the points. The program is mostly a demonstration of the <i>CX</i>
class but there is a little use of the <i>Imag</i> class and <i>_I_</i>. A copy 
of the output from the program is in mandel.txt. Your output will probably 
differ because of the formatting of the output and round-off error. </p>

<p align="center"><img border="0" src="mandel.gif" alt="Mandelbrot set image"></p>

<p>&nbsp;</p>

<ul>
  <li><a href="#top">Go to top</a></li>
  <li><a HREF="ol_doc.htm">To online documentation page</a></li>
</ul>

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>

</body>

</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?