
| Current Path : /usr/share/gap/doc/ref/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : //usr/share/gap/doc/ref/chap19_mj.html |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script type="text/javascript"
src="mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<title>GAP (ref) - Chapter 19: Floats</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap19" onload="jscontent()">
<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0_mj.html">Top</a> <a href="chap1_mj.html">1</a> <a href="chap2_mj.html">2</a> <a href="chap3_mj.html">3</a> <a href="chap4_mj.html">4</a> <a href="chap5_mj.html">5</a> <a href="chap6_mj.html">6</a> <a href="chap7_mj.html">7</a> <a href="chap8_mj.html">8</a> <a href="chap9_mj.html">9</a> <a href="chap10_mj.html">10</a> <a href="chap11_mj.html">11</a> <a href="chap12_mj.html">12</a> <a href="chap13_mj.html">13</a> <a href="chap14_mj.html">14</a> <a href="chap15_mj.html">15</a> <a href="chap16_mj.html">16</a> <a href="chap17_mj.html">17</a> <a href="chap18_mj.html">18</a> <a href="chap19_mj.html">19</a> <a href="chap20_mj.html">20</a> <a href="chap21_mj.html">21</a> <a href="chap22_mj.html">22</a> <a href="chap23_mj.html">23</a> <a href="chap24_mj.html">24</a> <a href="chap25_mj.html">25</a> <a href="chap26_mj.html">26</a> <a href="chap27_mj.html">27</a> <a href="chap28_mj.html">28</a> <a href="chap29_mj.html">29</a> <a href="chap30_mj.html">30</a> <a href="chap31_mj.html">31</a> <a href="chap32_mj.html">32</a> <a href="chap33_mj.html">33</a> <a href="chap34_mj.html">34</a> <a href="chap35_mj.html">35</a> <a href="chap36_mj.html">36</a> <a href="chap37_mj.html">37</a> <a href="chap38_mj.html">38</a> <a href="chap39_mj.html">39</a> <a href="chap40_mj.html">40</a> <a href="chap41_mj.html">41</a> <a href="chap42_mj.html">42</a> <a href="chap43_mj.html">43</a> <a href="chap44_mj.html">44</a> <a href="chap45_mj.html">45</a> <a href="chap46_mj.html">46</a> <a href="chap47_mj.html">47</a> <a href="chap48_mj.html">48</a> <a href="chap49_mj.html">49</a> <a href="chap50_mj.html">50</a> <a href="chap51_mj.html">51</a> <a href="chap52_mj.html">52</a> <a href="chap53_mj.html">53</a> <a href="chap54_mj.html">54</a> <a href="chap55_mj.html">55</a> <a href="chap56_mj.html">56</a> <a href="chap57_mj.html">57</a> <a href="chap58_mj.html">58</a> <a href="chap59_mj.html">59</a> <a href="chap60_mj.html">60</a> <a href="chap61_mj.html">61</a> <a href="chap62_mj.html">62</a> <a href="chap63_mj.html">63</a> <a href="chap64_mj.html">64</a> <a href="chap65_mj.html">65</a> <a href="chap66_mj.html">66</a> <a href="chap67_mj.html">67</a> <a href="chap68_mj.html">68</a> <a href="chap69_mj.html">69</a> <a href="chap70_mj.html">70</a> <a href="chap71_mj.html">71</a> <a href="chap72_mj.html">72</a> <a href="chap73_mj.html">73</a> <a href="chap74_mj.html">74</a> <a href="chap75_mj.html">75</a> <a href="chap76_mj.html">76</a> <a href="chap77_mj.html">77</a> <a href="chap78_mj.html">78</a> <a href="chap79_mj.html">79</a> <a href="chap80_mj.html">80</a> <a href="chap81_mj.html">81</a> <a href="chap82_mj.html">82</a> <a href="chap83_mj.html">83</a> <a href="chap84_mj.html">84</a> <a href="chap85_mj.html">85</a> <a href="chap86_mj.html">86</a> <a href="chap87_mj.html">87</a> <a href="chapBib_mj.html">Bib</a> <a href="chapInd_mj.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0_mj.html">[Top of Book]</a> <a href="chap0_mj.html#contents">[Contents]</a> <a href="chap18_mj.html">[Previous Chapter]</a> <a href="chap20_mj.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap19.html">[MathJax off]</a></p>
<p><a id="X81AA901181CA568F" name="X81AA901181CA568F"></a></p>
<div class="ChapSects"><a href="chap19_mj.html#X81AA901181CA568F">19 <span class="Heading">Floats</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap19_mj.html#X7B4092CA7ABB93B0">19.1 <span class="Heading">A sample run</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap19_mj.html#X8606FDCE878850EF">19.2 <span class="Heading">Methods</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X86D5EA93813FB6C4">19.2-1 <span class="Heading">Float creators</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7BCD34DC7B5A0521">19.2-2 Rat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7D1EAE11844625F4">19.2-3 Cyc</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7A962B0983FA66E8">19.2-4 SetFloats</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X819050BF8403806E">19.2-5 FLOAT</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7BD96E0585D5A1EE">19.2-6 EqFloat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7B3133497DDE839B">19.2-7 PrecisionFloat</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X801753137949DD78">19.2-8 SignBit</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7E03FDEE824D1E8E">19.2-9 <span class="Heading">Infinity testers</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X8151581186F75BA3">19.2-10 <span class="Heading">Standard mathematical operations</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap19_mj.html#X845ACF3A78BD2771">19.3 <span class="Heading">High-precision-specific methods</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap19_mj.html#X7E8F6EFB87A65F78">19.4 <span class="Heading">Complex arithmetic</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7B0269D983F96677">19.4-1 Argument</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap19_mj.html#X7E57B09C80136484">19.5 <span class="Heading">Interval-specific methods</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7C34D1D185802F2F">19.5-1 Sup</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X78F1E457814FD1FD">19.5-2 Inf</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X829581A485F55996">19.5-3 Mid</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7FE540B387B0012C">19.5-4 AbsoluteDiameter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7CA771757F441592">19.5-5 RelativeDiameter</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X86D22AE57E2D84B2">19.5-6 IsDisjoint</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7A5E0C3E79837EB8">19.5-7 IsSubset</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X85191E1679936CE9">19.5-8 IncreaseInterval</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X879EE14282DD1539">19.5-9 BlowupInterval</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap19_mj.html#X7EC15DAE7CBBB42E">19.5-10 BisectInterval</a></span>
</div></div>
</div>
<h3>19 <span class="Heading">Floats</span></h3>
<p>Starting with version 4.5, <strong class="pkg">GAP</strong> has built-in support for floating-point numbers in machine format, and allows package to implement arbitrary-precision floating-point arithmetic in a uniform manner. For now, one such package, <strong class="pkg">Float</strong> exists, and is based on the arbitrary-precision routines in <strong class="pkg">mpfr</strong>.</p>
<p>A word of caution: <strong class="pkg">GAP</strong> deals primarily with algebraic objects, which can be represented exactly in a computer. Numerical imprecision means that floating-point numbers do not form a ring in the strict <strong class="pkg">GAP</strong> sense, because addition is in general not associative (<code class="code">(1.0e-100+1.0)-1.0</code> is not the same as <code class="code">1.0e-100+(1.0-1.0)</code>, in the default precision setting).</p>
<p>Most algorithms in <strong class="pkg">GAP</strong> which require ring elements will therefore not be applicable to floating-point elements. In some cases, such a notion would not even make any sense (what is the greatest common divisor of two floating-point numbers?)</p>
<p><a id="X7B4092CA7ABB93B0" name="X7B4092CA7ABB93B0"></a></p>
<h4>19.1 <span class="Heading">A sample run</span></h4>
<p>Floating-point numbers can be input into <strong class="pkg">GAP</strong> in the standard floating-point notation:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">3.14;</span>
3.14
<span class="GAPprompt">gap></span> <span class="GAPinput">last^2/6;</span>
1.64327
<span class="GAPprompt">gap></span> <span class="GAPinput">h := 6.62606896e-34;</span>
6.62607e-34
<span class="GAPprompt">gap></span> <span class="GAPinput">pi := 4*Atan(1.0);</span>
3.14159
<span class="GAPprompt">gap></span> <span class="GAPinput">hbar := h/(2*pi);</span>
1.05457e-34
</pre></div>
<p>Floating-point numbers can also be created using <code class="code">Float</code>, from strings or rational numbers; and can be converted back using <code class="code">String,Rat,Int</code>.</p>
<p><strong class="pkg">GAP</strong> allows rational and floating-point numbers to be mixed in the elementary operations <code class="code">+,-,*,/</code>. However, floating-point numbers and rational numbers may not be compared. Conversions are performed using the creator <code class="code">Float</code>:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Float("3.1416");</span>
3.1416
<span class="GAPprompt">gap></span> <span class="GAPinput">Float(355/113);</span>
3.14159
<span class="GAPprompt">gap></span> <span class="GAPinput">Rat(last);</span>
355/113
<span class="GAPprompt">gap></span> <span class="GAPinput">Rat(0.33333);</span>
1/3
<span class="GAPprompt">gap></span> <span class="GAPinput">Int(1.e10);</span>
10000000000
<span class="GAPprompt">gap></span> <span class="GAPinput">Int(1.e20);</span>
100000000000000000000
<span class="GAPprompt">gap></span> <span class="GAPinput">Int(1.e30);</span>
1000000000000000019884624838656
</pre></div>
<p><a id="X8606FDCE878850EF" name="X8606FDCE878850EF"></a></p>
<h4>19.2 <span class="Heading">Methods</span></h4>
<p>Floating-point numbers may be directly input, as in any usual mathematical software or language; with the exception that every floating-point number must contain a decimal digit. Therefore <code class="code">.1</code>, <code class="code">.1e1</code>, <code class="code">-.999</code> etc. are all valid <strong class="pkg">GAP</strong> inputs.</p>
<p>Floating-point numbers so entered in <strong class="pkg">GAP</strong> are stored as strings. They are converted to floating-point when they are first used. This means that, if the floating-point precision is increased, the constants are reevaluated to fit the new format.</p>
<p>Floating-point numbers may be followed by an underscore, as in <code class="code">1._</code>. This means that they are to be immediately converted to the current floating-point format. The underscore may be followed by a single letter, which specifies which format/precision to use. By default, <strong class="pkg">GAP</strong> has a single floating-point handler, with fixed (53 bits) precision, and its format specifier is <code class="code">'l'</code> as in <code class="code">1._l</code>. Higher-precision floating-point computations is available via external packages; <strong class="pkg">float</strong> for example.</p>
<p>A record, <code class="func">FLOAT</code> (<a href="chap19_mj.html#X819050BF8403806E"><span class="RefLink">19.2-5</span></a>), contains all relevant constants for the current floating-point format; see its documentation for details. Typical fields are <code class="code">FLOAT.MANT_DIG=53</code>, the constant <code class="code">FLOAT.VIEW_DIG=6</code> specifying the number of digits to view, and <code class="code">FLOAT.PI</code> for the constant <span class="SimpleMath">\(\pi\)</span>. The constants have the same name as their C counterparts, except for the missing initial <code class="code">DBL_</code> or <code class="code">M_</code>.</p>
<p>Floating-point numbers may be created using the single function <code class="func">Float</code> (<a href="chap19_mj.html#X86D5EA93813FB6C4"><span class="RefLink">19.2-1</span></a>), which accepts as arguments rational, string, or floating-point numbers. Floating-point numbers may also be created, in any floating-point representation, using <code class="func">NewFloat</code> (<a href="chap19_mj.html#X86D5EA93813FB6C4"><span class="RefLink">19.2-1</span></a>) as in <code class="code">NewFloat(IsIEEE754FloatRep,355/113)</code>, by supplying the category filter of the desired new floating-point number; or using <code class="func">MakeFloat</code> (<a href="chap19_mj.html#X86D5EA93813FB6C4"><span class="RefLink">19.2-1</span></a>) as in <code class="code">NewFloat(1.0,355/113)</code>, by supplying a sample floating-point number.</p>
<p>Floating-point numbers may also be converted to other <strong class="pkg">GAP</strong> formats using the usual commands <code class="func">Int</code> (<a href="chap14_mj.html#X87CA734380B5F68C"><span class="RefLink">14.2-3</span></a>), <code class="func">Rat</code> (<a href="chap17_mj.html#X7EB4C646806A2BDE"><span class="RefLink">17.2-6</span></a>), <code class="func">String</code> (<a href="chap27_mj.html#X81FB5BE27903EC32"><span class="RefLink">27.7-6</span></a>).</p>
<p>Exact conversion to and from floating-point format may be done using external representations. The "external representation" of a floating-point number <code class="code">x</code> is a pair <code class="code">[m,e]</code> of integers, such that <code class="code">x=m*2^(-1+e-LogInt(AbsInt(m),2))</code>. Conversion to and from external representation is performed as usual using <code class="func">ExtRepOfObj</code> (<a href="chap79_mj.html#X8542B32A8206118C"><span class="RefLink">79.16-1</span></a>) and <code class="func">ObjByExtRep</code> (<a href="chap79_mj.html#X8542B32A8206118C"><span class="RefLink">79.16-1</span></a>):</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ExtRepOfObj(3.14);</span>
[ 7070651414971679, 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ObjByExtRep(IEEE754FloatsFamily,last);</span>
3.14
</pre></div>
<p>Computations with floating-point numbers never raise any error. Division by zero is allowed, and produces a signed infinity. Illegal operations, such as <code class="code">0./0.</code>, produce <code class="keyw">NaN</code>'s (not-a-number); this is the only floating-point number <code class="code">x</code> such that <code class="code">not EqFloat(x+0.0,x)</code>.</p>
<p>The IEEE754 standard requires <code class="keyw">NaN</code> to be non-equal to itself. On the other hand, <strong class="pkg">GAP</strong> requires every object to be equal to itself. To respect the IEEE754 standard, the function <code class="func">EqFloat</code> (<a href="chap19_mj.html#X7BD96E0585D5A1EE"><span class="RefLink">19.2-6</span></a>) should be used instead of <code class="code">=</code>.</p>
<p>The category a floating-point belongs to can be checked using the filters <code class="func">IsFinite</code> (<a href="chap30_mj.html#X808A4061809A6E67"><span class="RefLink">30.4-2</span></a>), <code class="func">IsPInfinity</code> (<a href="chap19_mj.html#X7E03FDEE824D1E8E"><span class="RefLink">19.2-9</span></a>), <code class="func">IsNInfinity</code> (<a href="chap19_mj.html#X7E03FDEE824D1E8E"><span class="RefLink">19.2-9</span></a>), <code class="func">IsXInfinity</code> (<a href="chap19_mj.html#X7E03FDEE824D1E8E"><span class="RefLink">19.2-9</span></a>), <code class="func">IsNaN</code> (<a href="chap19_mj.html#X7E03FDEE824D1E8E"><span class="RefLink">19.2-9</span></a>).</p>
<p>Comparisons between floating-point numbers and rationals are explicitly forbidden. The rationale is that objects belonging to different families should in general not be comparable in <strong class="pkg">GAP</strong>. Floating-point numbers are also approximations of real numbers, and don't follow the same rules; consider for example, using the default <strong class="pkg">GAP</strong> implementation of floating-point numbers,</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">1.0/3.0 = Float(1/3);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">(1.0/3.0)^5 = Float((1/3)^5);</span>
false
</pre></div>
<p><a id="X86D5EA93813FB6C4" name="X86D5EA93813FB6C4"></a></p>
<h5>19.2-1 <span class="Heading">Float creators</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Float</code>( <var class="Arg">obj</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NewFloat</code>( <var class="Arg">filter</var>, <var class="Arg">obj</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MakeFloat</code>( <var class="Arg">sample</var>, <var class="Arg">obj</var>, <var class="Arg">obj</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A new floating-point number, based on <var class="Arg">obj</var></p>
<p>This function creates a new floating-point number.</p>
<p>If <var class="Arg">obj</var> is a rational number, the created number is created with sufficient precision so that the number can (usually) be converted back to the original number (see <code class="func">Rat</code> (<span class="RefLink">Reference: Rat</span>) and <code class="func">Rat</code> (<a href="chap17_mj.html#X7EB4C646806A2BDE"><span class="RefLink">17.2-6</span></a>)). For an integer, the precision, if unspecified, is chosen sufficient so that <code class="code">Int(Float(obj))=obj</code> always holds, but at least 64 bits.</p>
<p><var class="Arg">obj</var> may also be a string, which may be of the form <code class="code">"3.14e0"</code> or <code class="code">".314e1"</code> or <code class="code">".314@1"</code> etc.</p>
<p>An option may be passed to specify, it bits, a desired precision. The format is <code class="code">Float("3.14":PrecisionFloat:=1000)</code> to create a 1000-bit approximation of <span class="SimpleMath">\(3.14\)</span>.</p>
<p>In particular, if <var class="Arg">obj</var> is already a floating-point number, then <code class="code">Float(obj:PrecisionFloat:=prec)</code> creates a copy of <var class="Arg">obj</var> with a new precision. prec</p>
<p><a id="X7BCD34DC7B5A0521" name="X7BCD34DC7B5A0521"></a></p>
<h5>19.2-2 Rat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Rat</code>( <var class="Arg">f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A rational approximation to <var class="Arg">f</var></p>
<p>This command constructs a rational approximation to the floating-point number <var class="Arg">f</var>. Of course, it is not guaranteed to return the original rational number <var class="Arg">f</var> was created from, though it returns the most `reasonable' one given the precision of <var class="Arg">f</var>.</p>
<p>Two options control the precision of the rational approximation: In the form <code class="code">Rat(f:maxdenom:=md,maxpartial:=mp)</code>, the rational returned is such that the denominator is at most <var class="Arg">md</var> and the partials in its continued fraction expansion are at most <var class="Arg">mp</var>. The default values are <code class="code">maxpartial:=10000</code> and <code class="code">maxdenom:=2^(precision/2)</code>.</p>
<p><a id="X7D1EAE11844625F4" name="X7D1EAE11844625F4"></a></p>
<h5>19.2-3 Cyc</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Cyc</code>( <var class="Arg">f</var>[, <var class="Arg">degree</var>] )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A cyclotomic approximation to <var class="Arg">f</var></p>
<p>This command constructs a cyclotomic approximation to the floating-point number <var class="Arg">f</var>. Of course, it is not guaranteed to return the original rational number <var class="Arg">f</var> was created from, though it returns the most `reasonable' one given the precision of <var class="Arg">f</var>. An optional argument <var class="Arg">degree</var> specifies the maximal degree of the cyclotomic to be constructed.</p>
<p>The method used is LLL lattice reduction.</p>
<p><a id="X7A962B0983FA66E8" name="X7A962B0983FA66E8"></a></p>
<h5>19.2-4 SetFloats</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SetFloats</code>( <var class="Arg">rec</var>[, <var class="Arg">bits</var>][, <var class="Arg">install</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Installs a new interface to floating-point numbers in <strong class="pkg">GAP</strong>, optionally with a desired precision <var class="Arg">bits</var> in binary digits. The last optional argument <var class="Arg">install</var> is a boolean value; if false, it only installs the eager handler and the precision for the floateans, without making them the default.</p>
<p><a id="X819050BF8403806E" name="X819050BF8403806E"></a></p>
<h5>19.2-5 FLOAT</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FLOAT</code></td><td class="tdright">( global variable )</td></tr></table></div>
<p>This record contains useful floating-point constants:</p>
<dl>
<dt><strong class="Mark">DECIMAL_DIG</strong></dt>
<dd><p>Maximal number of useful digits;</p>
</dd>
<dt><strong class="Mark">DIG</strong></dt>
<dd><p>Number of significant digits;</p>
</dd>
<dt><strong class="Mark">VIEW_DIG</strong></dt>
<dd><p>Number of digits to print in short view;</p>
</dd>
<dt><strong class="Mark">EPSILON</strong></dt>
<dd><p>Smallest number such that <span class="SimpleMath">\(1\neq1+\epsilon\)</span>;</p>
</dd>
<dt><strong class="Mark">MANT_DIG</strong></dt>
<dd><p>Number of bits in the mantissa;</p>
</dd>
<dt><strong class="Mark">MAX</strong></dt>
<dd><p>Maximal representable number;</p>
</dd>
<dt><strong class="Mark">MAX_10_EXP</strong></dt>
<dd><p>Maximal decimal exponent;</p>
</dd>
<dt><strong class="Mark">MAX_EXP</strong></dt>
<dd><p>Maximal binary exponent;</p>
</dd>
<dt><strong class="Mark">MIN</strong></dt>
<dd><p>Minimal positive representable number;</p>
</dd>
<dt><strong class="Mark">MIN_10_EXP</strong></dt>
<dd><p>Minimal decimal exponent;</p>
</dd>
<dt><strong class="Mark">MIN_EXP</strong></dt>
<dd><p>Minimal exponent;</p>
</dd>
<dt><strong class="Mark">INFINITY</strong></dt>
<dd><p>Positive infinity;</p>
</dd>
<dt><strong class="Mark">NINFINITY</strong></dt>
<dd><p>Negative infinity;</p>
</dd>
<dt><strong class="Mark">NAN</strong></dt>
<dd><p>Not-a-number,</p>
</dd>
</dl>
<p>as well as mathematical constants <code class="code">E</code>, <code class="code">LOG2E</code>, <code class="code">LOG10E</code>, <code class="code">LN2</code>, <code class="code">LN10</code>, <code class="code">PI</code>, <code class="code">PI_2</code>, <code class="code">PI_4</code>, <code class="code">1_PI</code>, <code class="code">2_PI</code>, <code class="code">2_SQRTPI</code>, <code class="code">SQRT2</code>, <code class="code">SQRT1_2</code>.</p>
<p><a id="X7BD96E0585D5A1EE" name="X7BD96E0585D5A1EE"></a></p>
<h5>19.2-6 EqFloat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ EqFloat</code>( <var class="Arg">x</var>, <var class="Arg">y</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: Whether the floateans <var class="Arg">x</var> and <var class="Arg">y</var> are equal</p>
<p>This function compares two floating-point numbers, and returns <code class="keyw">true</code> if they are equal, and <code class="keyw">false</code> otherwise; with the exception that <code class="keyw">NaN</code> is always considered to be different from itself.</p>
<p><a id="X7B3133497DDE839B" name="X7B3133497DDE839B"></a></p>
<h5>19.2-7 PrecisionFloat</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PrecisionFloat</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The precision of <var class="Arg">x</var></p>
<p>This function returns the precision, counted in number of binary digits, of the floating-point number <var class="Arg">x</var>.</p>
<p><a id="X801753137949DD78" name="X801753137949DD78"></a></p>
<h5>19.2-8 SignBit</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SignBit</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SignFloat</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The sign of <var class="Arg">x</var>.</p>
<p>The first function <code class="code">SignBit</code> returns the sign bit of the floating-point number <var class="Arg">x</var>: <code class="keyw">true</code> if <var class="Arg">x</var> is negative (including <code class="code">-0.</code>) and <code class="keyw">false</code> otherwise.</p>
<p>The second function <code class="code">SignFloat</code> returns the integer <code class="keyw">-1</code> if <var class="Arg">x<0</var>, <code class="keyw">0</code> if <var class="Arg">x=0</var> and <code class="keyw">1</code> if <var class="Arg">x>0</var>.</p>
<p><a id="X7E03FDEE824D1E8E" name="X7E03FDEE824D1E8E"></a></p>
<h5>19.2-9 <span class="Heading">Infinity testers</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsPInfinity</code>( <var class="Arg">x</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsNInfinity</code>( <var class="Arg">x</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsXInfinity</code>( <var class="Arg">x</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFinite</code>( <var class="Arg">x</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsNaN</code>( <var class="Arg">x</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns <code class="keyw">true</code> if the floating-point number <var class="Arg">x</var> is respectively <span class="SimpleMath">\(+\infty\)</span>, <span class="SimpleMath">\(-\infty\)</span>, <span class="SimpleMath">\(\pm\infty\)</span>, finite, or `not a number', such as the result of <code class="code">0.0/0.0</code>.</p>
<p><a id="X8151581186F75BA3" name="X8151581186F75BA3"></a></p>
<h5>19.2-10 <span class="Heading">Standard mathematical operations</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Cos</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Sin</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Tan</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Sec</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Csc</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Cot</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Asin</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Acos</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Atan</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Cosh</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Sinh</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Tanh</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Sech</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Csch</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Coth</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Asinh</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Acosh</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Atanh</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Log</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Log2</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Log10</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Log1p</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Exp</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Exp2</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Exp10</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Expm1</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CubeRoot</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Square</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Ceil</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Floor</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Round</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Trunc</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Atan2</code>( <var class="Arg">y</var>, <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FrExp</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LdExp</code>( <var class="Arg">f</var>, <var class="Arg">exp</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AbsoluteValue</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Norm</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Hypothenuse</code>( <var class="Arg">x</var>, <var class="Arg">y</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Frac</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SinCos</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Erf</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Zeta</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Gamma</code>( <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Standard math functions.</p>
<p><a id="X845ACF3A78BD2771" name="X845ACF3A78BD2771"></a></p>
<h4>19.3 <span class="Heading">High-precision-specific methods</span></h4>
<p><strong class="pkg">GAP</strong> provides a mechanism for packages to implement new floating-point numerical interfaces. The following describes that mechanism, actual examples of packages are documented separately.</p>
<p>A package must create a record with fields (all optional)</p>
<dl>
<dt><strong class="Mark">creator</strong></dt>
<dd><p>a function converting strings to floating-point;</p>
</dd>
<dt><strong class="Mark">eager</strong></dt>
<dd><p>a character allowing immediate conversion to floating-point;</p>
</dd>
<dt><strong class="Mark">objbyextrep</strong></dt>
<dd><p>a function creating a floating-point number out of a list <code class="code">[mantissa,exponent]</code>;</p>
</dd>
<dt><strong class="Mark">filter</strong></dt>
<dd><p>a filter for the new floating-point objects;</p>
</dd>
<dt><strong class="Mark">constants</strong></dt>
<dd><p>a record containing numerical constants, such as <code class="code">MANT_DIG</code>, <code class="code">MAX</code>, <code class="code">MIN</code>, <code class="code">NAN</code>.</p>
</dd>
</dl>
<p>The package must install methods <code class="code">Int</code>, <code class="code">Rat</code>, <code class="code">String</code> for its objects, and creators <code class="code">NewFloat(filter,IsRat)</code>, <code class="code">NewFloat(IsString)</code>.</p>
<p>It must then install methods for all arithmetic and numerical operations: <code class="code">PLUS</code>, <code class="code">Exp</code>, ...</p>
<p>The user chooses that implementation by calling <code class="func">SetFloats</code> (<a href="chap19_mj.html#X7A962B0983FA66E8"><span class="RefLink">19.2-4</span></a>) with the record as argument, and with an optional second argument requesting a precision in binary digits.</p>
<p><a id="X7E8F6EFB87A65F78" name="X7E8F6EFB87A65F78"></a></p>
<h4>19.4 <span class="Heading">Complex arithmetic</span></h4>
<p>Complex arithmetic may be implemented in packages, and is present in <strong class="pkg">float</strong>. Complex numbers are treated as usual numbers; they may be input with an extra "i" as in <code class="code">-0.5+0.866i</code>. They may also be created using <code class="func">NewFloat</code> (<a href="chap19_mj.html#X86D5EA93813FB6C4"><span class="RefLink">19.2-1</span></a>) with three arguments: the float filter, the real part, and the imaginary part.</p>
<p>Methods should then be implemented for <code class="code">Norm</code>, <code class="code">RealPart</code>, <code class="code">ImaginaryPart</code>, <code class="code">ComplexConjugate</code>, ...</p>
<p><a id="X7B0269D983F96677" name="X7B0269D983F96677"></a></p>
<h5>19.4-1 Argument</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Argument</code>( <var class="Arg">z</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the argument of the complex number <var class="Arg">z</var>, namely the value <code class="code">Atan2(ImaginaryPart(z),RealPart(z))</code>.</p>
<p><a id="X7E57B09C80136484" name="X7E57B09C80136484"></a></p>
<h4>19.5 <span class="Heading">Interval-specific methods</span></h4>
<p>Interval arithmetic may also be implemented in packages. Intervals are in fact efficient implementations of sets of real numbers. The only non-trivial issue is how they should be compared. The standard <code class="code">EQ</code> tests if the intervals are equal; however, it is usually more useful to know if intervals overlap, or are disjoint, or are contained in each other.</p>
<p>Note the usual convention that intervals are compared as in <span class="SimpleMath">\([a,b]\le[c,d]\)</span> if and only if <span class="SimpleMath">\(a\le c\)</span> and <span class="SimpleMath">\(b\le d\)</span>.</p>
<p><a id="X7C34D1D185802F2F" name="X7C34D1D185802F2F"></a></p>
<h5>19.5-1 Sup</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Sup</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the supremum of the interval <var class="Arg">x</var>.</p>
<p><a id="X78F1E457814FD1FD" name="X78F1E457814FD1FD"></a></p>
<h5>19.5-2 Inf</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Inf</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the infimum of the interval <var class="Arg">x</var>.</p>
<p><a id="X829581A485F55996" name="X829581A485F55996"></a></p>
<h5>19.5-3 Mid</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Mid</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the midpoint of the interval <var class="Arg">x</var>.</p>
<p><a id="X7FE540B387B0012C" name="X7FE540B387B0012C"></a></p>
<h5>19.5-4 AbsoluteDiameter</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AbsoluteDiameter</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Diameter</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the absolute diameter of the interval <var class="Arg">x</var>, namely the difference <code class="code">Sup(x)-Inf(x)</code>.</p>
<p><a id="X7CA771757F441592" name="X7CA771757F441592"></a></p>
<h5>19.5-5 RelativeDiameter</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RelativeDiameter</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns the relative diameter of the interval <var class="Arg">x</var>, namely <code class="code">(Sup(x)-Inf(x))/AbsoluteValue(Min(x))</code>.</p>
<p><a id="X86D22AE57E2D84B2" name="X86D22AE57E2D84B2"></a></p>
<h5>19.5-6 IsDisjoint</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDisjoint</code>( <var class="Arg">x1</var>, <var class="Arg">x2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns <code class="keyw">true</code> if the two intervals <var class="Arg">x1</var>, <var class="Arg">x2</var> are disjoint.</p>
<p><a id="X7A5E0C3E79837EB8" name="X7A5E0C3E79837EB8"></a></p>
<h5>19.5-7 IsSubset</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSubset</code>( <var class="Arg">x1</var>, <var class="Arg">x2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns <code class="keyw">true</code> if the interval <var class="Arg">x1</var> contains <var class="Arg">x2</var>.</p>
<p><a id="X85191E1679936CE9" name="X85191E1679936CE9"></a></p>
<h5>19.5-8 IncreaseInterval</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IncreaseInterval</code>( <var class="Arg">x</var>, <var class="Arg">delta</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns an interval with same midpoint as <var class="Arg">x</var> but absolute diameter increased by <var class="Arg">delta</var>.</p>
<p><a id="X879EE14282DD1539" name="X879EE14282DD1539"></a></p>
<h5>19.5-9 BlowupInterval</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BlowupInterval</code>( <var class="Arg">x</var>, <var class="Arg">ratio</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns an interval with same midpoint as <var class="Arg">x</var> but relative diameter increased by <var class="Arg">ratio</var>.</p>
<p><a id="X7EC15DAE7CBBB42E" name="X7EC15DAE7CBBB42E"></a></p>
<h5>19.5-10 BisectInterval</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BisectInterval</code>( <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns a list of two intervals whose union equals the interval <var class="Arg">x</var>.</p>
<div class="chlinkprevnextbot"> <a href="chap0_mj.html">[Top of Book]</a> <a href="chap0_mj.html#contents">[Contents]</a> <a href="chap18_mj.html">[Previous Chapter]</a> <a href="chap20_mj.html">[Next Chapter]</a> </div>
<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0_mj.html">Top</a> <a href="chap1_mj.html">1</a> <a href="chap2_mj.html">2</a> <a href="chap3_mj.html">3</a> <a href="chap4_mj.html">4</a> <a href="chap5_mj.html">5</a> <a href="chap6_mj.html">6</a> <a href="chap7_mj.html">7</a> <a href="chap8_mj.html">8</a> <a href="chap9_mj.html">9</a> <a href="chap10_mj.html">10</a> <a href="chap11_mj.html">11</a> <a href="chap12_mj.html">12</a> <a href="chap13_mj.html">13</a> <a href="chap14_mj.html">14</a> <a href="chap15_mj.html">15</a> <a href="chap16_mj.html">16</a> <a href="chap17_mj.html">17</a> <a href="chap18_mj.html">18</a> <a href="chap19_mj.html">19</a> <a href="chap20_mj.html">20</a> <a href="chap21_mj.html">21</a> <a href="chap22_mj.html">22</a> <a href="chap23_mj.html">23</a> <a href="chap24_mj.html">24</a> <a href="chap25_mj.html">25</a> <a href="chap26_mj.html">26</a> <a href="chap27_mj.html">27</a> <a href="chap28_mj.html">28</a> <a href="chap29_mj.html">29</a> <a href="chap30_mj.html">30</a> <a href="chap31_mj.html">31</a> <a href="chap32_mj.html">32</a> <a href="chap33_mj.html">33</a> <a href="chap34_mj.html">34</a> <a href="chap35_mj.html">35</a> <a href="chap36_mj.html">36</a> <a href="chap37_mj.html">37</a> <a href="chap38_mj.html">38</a> <a href="chap39_mj.html">39</a> <a href="chap40_mj.html">40</a> <a href="chap41_mj.html">41</a> <a href="chap42_mj.html">42</a> <a href="chap43_mj.html">43</a> <a href="chap44_mj.html">44</a> <a href="chap45_mj.html">45</a> <a href="chap46_mj.html">46</a> <a href="chap47_mj.html">47</a> <a href="chap48_mj.html">48</a> <a href="chap49_mj.html">49</a> <a href="chap50_mj.html">50</a> <a href="chap51_mj.html">51</a> <a href="chap52_mj.html">52</a> <a href="chap53_mj.html">53</a> <a href="chap54_mj.html">54</a> <a href="chap55_mj.html">55</a> <a href="chap56_mj.html">56</a> <a href="chap57_mj.html">57</a> <a href="chap58_mj.html">58</a> <a href="chap59_mj.html">59</a> <a href="chap60_mj.html">60</a> <a href="chap61_mj.html">61</a> <a href="chap62_mj.html">62</a> <a href="chap63_mj.html">63</a> <a href="chap64_mj.html">64</a> <a href="chap65_mj.html">65</a> <a href="chap66_mj.html">66</a> <a href="chap67_mj.html">67</a> <a href="chap68_mj.html">68</a> <a href="chap69_mj.html">69</a> <a href="chap70_mj.html">70</a> <a href="chap71_mj.html">71</a> <a href="chap72_mj.html">72</a> <a href="chap73_mj.html">73</a> <a href="chap74_mj.html">74</a> <a href="chap75_mj.html">75</a> <a href="chap76_mj.html">76</a> <a href="chap77_mj.html">77</a> <a href="chap78_mj.html">78</a> <a href="chap79_mj.html">79</a> <a href="chap80_mj.html">80</a> <a href="chap81_mj.html">81</a> <a href="chap82_mj.html">82</a> <a href="chap83_mj.html">83</a> <a href="chap84_mj.html">84</a> <a href="chap85_mj.html">85</a> <a href="chap86_mj.html">86</a> <a href="chap87_mj.html">87</a> <a href="chapBib_mj.html">Bib</a> <a href="chapInd_mj.html">Ind</a> </div>
<hr />
<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>