⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cx.htm

📁 VC环境下的实用的复数库函数,编译后可作为库函数使用.
💻 HTM
📖 第 1 页 / 共 3 页
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -