amath/scan-build/report-3a56cc.html

448 lines
50 KiB
HTML

<!doctype html>
<html>
<head>
<title>lib/real/pow.c</title>
<style type="text/css">
body { color:#000000; background-color:#ffffff }
body { font-family:Helvetica, sans-serif; font-size:10pt }
h1 { font-size:14pt }
.code { border-collapse:collapse; width:100%; }
.code { font-family: "Monospace", monospace; font-size:10pt }
.code { line-height: 1.2em }
.comment { color: green; font-style: oblique }
.keyword { color: blue }
.string_literal { color: red }
.directive { color: darkmagenta }
.expansion { display: none; }
.macro:hover .expansion { display: block; border: 2px solid #FF0000; padding: 2px; background-color:#FFF0F0; font-weight: normal; -webkit-border-radius:5px; -webkit-box-shadow:1px 1px 7px #000; position: absolute; top: -1em; left:10em; z-index: 1 }
.macro { color: darkmagenta; background-color:LemonChiffon; position: relative }
.num { width:2.5em; padding-right:2ex; background-color:#eeeeee }
.num { text-align:right; font-size:8pt }
.num { color:#444444 }
.line { padding-left: 1ex; border-left: 3px solid #ccc }
.line { white-space: pre }
.msg { -webkit-box-shadow:1px 1px 7px #000 }
.msg { -webkit-border-radius:5px }
.msg { font-family:Helvetica, sans-serif; font-size:8pt }
.msg { float:left }
.msg { padding:0.25em 1ex 0.25em 1ex }
.msg { margin-top:10px; margin-bottom:10px }
.msg { font-weight:bold }
.msg { max-width:60em; word-wrap: break-word; white-space: pre-wrap }
.msgT { padding:0x; spacing:0x }
.msgEvent { background-color:#fff8b4; color:#000000 }
.msgControl { background-color:#bbbbbb; color:#000000 }
.mrange { background-color:#dfddf3 }
.mrange { border-bottom:1px solid #6F9DBE }
.PathIndex { font-weight: bold; padding:0px 5px; margin-right:5px; }
.PathIndex { -webkit-border-radius:8px }
.PathIndexEvent { background-color:#bfba87 }
.PathIndexControl { background-color:#8c8c8c }
.PathNav a { text-decoration:none; font-size: larger }
.CodeInsertionHint { font-weight: bold; background-color: #10dd10 }
.CodeRemovalHint { background-color:#de1010 }
.CodeRemovalHint { border-bottom:1px solid #6F9DBE }
table.simpletable {
padding: 5px;
font-size:12pt;
margin:20px;
border-collapse: collapse; border-spacing: 0px;
}
td.rowname {
text-align:right; font-weight:bold; color:#444444;
padding-right:2ex; }
</style>
</head>
<body>
<!-- BUGDESC Value stored to 'i1' is never read -->
<!-- BUGTYPE Dead assignment -->
<!-- BUGCATEGORY Dead store -->
<!-- BUGFILE /home/carsten/amath/lib/real/pow.c -->
<!-- FILENAME pow.c -->
<!-- FUNCTIONNAME pow -->
<!-- ISSUEHASHCONTENTOFLINEINCONTEXT e1b4b10697e719e7dd943d54d2e75047 -->
<!-- BUGLINE 148 -->
<!-- BUGCOLUMN 5 -->
<!-- BUGPATHLENGTH 1 -->
<!-- BUGMETAEND -->
<!-- REPORTHEADER -->
<h3>Bug Summary</h3>
<table class="simpletable">
<tr><td class="rowname">File:</td><td>real/pow.c</td></tr>
<tr><td class="rowname">Location:</td><td><a href="#EndPath">line 148, column 5</a></td></tr>
<tr><td class="rowname">Description:</td><td>Value stored to 'i1' is never read</td></tr>
</table>
<!-- REPORTSUMMARYEXTRA -->
<h3>Annotated Source Code</h3>
<table class="code">
<tr><td class="num" id="LN1">1</td><td class="line"><span class='comment'>/* @(#)e_pow.c 1.5 04/04/22 SMI */</span></td></tr>
<tr><td class="num" id="LN2">2</td><td class="line"> </td></tr>
<tr><td class="num" id="LN3">3</td><td class="line"><span class='comment'>/*</span></td></tr>
<tr><td class="num" id="LN4">4</td><td class="line"> <span class='comment'>* Copyright (c) 2015-2017 Carsten Sonne Larsen &lt;cs@innolan.dk&gt;</span></td></tr>
<tr><td class="num" id="LN5">5</td><td class="line"> <span class='comment'>* All rights reserved.</span></td></tr>
<tr><td class="num" id="LN6">6</td><td class="line"> <span class='comment'>*</span></td></tr>
<tr><td class="num" id="LN7">7</td><td class="line"> <span class='comment'>* Redistribution and use in source and binary forms, with or without</span></td></tr>
<tr><td class="num" id="LN8">8</td><td class="line"> <span class='comment'>* modification, are permitted provided that the following conditions</span></td></tr>
<tr><td class="num" id="LN9">9</td><td class="line"> <span class='comment'>* are met:</span></td></tr>
<tr><td class="num" id="LN10">10</td><td class="line"> <span class='comment'>* 1. Redistributions of source code must retain the above copyright</span></td></tr>
<tr><td class="num" id="LN11">11</td><td class="line"> <span class='comment'>* notice, this list of conditions and the following disclaimer.</span></td></tr>
<tr><td class="num" id="LN12">12</td><td class="line"> <span class='comment'>* 2. Redistributions in binary form must reproduce the above copyright</span></td></tr>
<tr><td class="num" id="LN13">13</td><td class="line"> <span class='comment'>* notice, this list of conditions and the following disclaimer in the</span></td></tr>
<tr><td class="num" id="LN14">14</td><td class="line"> <span class='comment'>* documentation and/or other materials provided with the distribution.</span></td></tr>
<tr><td class="num" id="LN15">15</td><td class="line"> <span class='comment'>*</span></td></tr>
<tr><td class="num" id="LN16">16</td><td class="line"> <span class='comment'>* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR</span></td></tr>
<tr><td class="num" id="LN17">17</td><td class="line"> <span class='comment'>* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES</span></td></tr>
<tr><td class="num" id="LN18">18</td><td class="line"> <span class='comment'>* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.</span></td></tr>
<tr><td class="num" id="LN19">19</td><td class="line"> <span class='comment'>* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,</span></td></tr>
<tr><td class="num" id="LN20">20</td><td class="line"> <span class='comment'>* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT</span></td></tr>
<tr><td class="num" id="LN21">21</td><td class="line"> <span class='comment'>* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></td></tr>
<tr><td class="num" id="LN22">22</td><td class="line"> <span class='comment'>* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></td></tr>
<tr><td class="num" id="LN23">23</td><td class="line"> <span class='comment'>* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></td></tr>
<tr><td class="num" id="LN24">24</td><td class="line"> <span class='comment'>* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF</span></td></tr>
<tr><td class="num" id="LN25">25</td><td class="line"> <span class='comment'>* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></td></tr>
<tr><td class="num" id="LN26">26</td><td class="line"> <span class='comment'>*</span></td></tr>
<tr><td class="num" id="LN27">27</td><td class="line"> <span class='comment'>* The origin source code can be obtained from:</span></td></tr>
<tr><td class="num" id="LN28">28</td><td class="line"> <span class='comment'>* http://www.netlib.org/fdlibm/e_pow.c</span></td></tr>
<tr><td class="num" id="LN29">29</td><td class="line"> <span class='comment'>*</span> </td></tr>
<tr><td class="num" id="LN30">30</td><td class="line"> <span class='comment'>*/</span></td></tr>
<tr><td class="num" id="LN31">31</td><td class="line"> </td></tr>
<tr><td class="num" id="LN32">32</td><td class="line"><span class='comment'>/*</span></td></tr>
<tr><td class="num" id="LN33">33</td><td class="line"> <span class='comment'>* ====================================================</span></td></tr>
<tr><td class="num" id="LN34">34</td><td class="line"> <span class='comment'>* Copyright (C) 2004 by Sun Microsystems, Inc. All rights reserved.</span></td></tr>
<tr><td class="num" id="LN35">35</td><td class="line"> <span class='comment'>*</span></td></tr>
<tr><td class="num" id="LN36">36</td><td class="line"> <span class='comment'>* Permission to use, copy, modify, and distribute this</span></td></tr>
<tr><td class="num" id="LN37">37</td><td class="line"> <span class='comment'>* software is freely granted, provided that this notice</span></td></tr>
<tr><td class="num" id="LN38">38</td><td class="line"> <span class='comment'>* is preserved.</span></td></tr>
<tr><td class="num" id="LN39">39</td><td class="line"> <span class='comment'>* ====================================================</span></td></tr>
<tr><td class="num" id="LN40">40</td><td class="line"> <span class='comment'>*/</span></td></tr>
<tr><td class="num" id="LN41">41</td><td class="line"> </td></tr>
<tr><td class="num" id="LN42">42</td><td class="line"><span class='directive'>#include "prim.h"</span></td></tr>
<tr><td class="num" id="LN43">43</td><td class="line"><span class='directive'>#include "math.h"</span></td></tr>
<tr><td class="num" id="LN44">44</td><td class="line"> </td></tr>
<tr><td class="num" id="LN45">45</td><td class="line"><span class='directive'>#ifdef <span class='macro'>__clang__<span class='expansion'>1</span></span></span></td></tr>
<tr><td class="num" id="LN46">46</td><td class="line"><span class='directive'># pragma clang diagnostic ignored "-Wunused-variable"</span></td></tr>
<tr><td class="num" id="LN47">47</td><td class="line"><span class='directive'># pragma clang diagnostic ignored "-Wstrict-aliasing"</span></td></tr>
<tr><td class="num" id="LN48">48</td><td class="line"><span class='directive'>#elif defined(<span class='macro'>__GNUC__<span class='expansion'>4</span></span>) &amp;&amp; <span class='macro'>__GNUC__<span class='expansion'>4</span></span> &gt; 2</span></td></tr>
<tr><td class="num" id="LN49">49</td><td class="line"><span class='directive'># pragma GCC diagnostic ignored "-Wunused-but-set-variable"</span></td></tr>
<tr><td class="num" id="LN50">50</td><td class="line"><span class='directive'># pragma GCC diagnostic ignored "-Wstrict-aliasing"</span></td></tr>
<tr><td class="num" id="LN51">51</td><td class="line"><span class='directive'>#endif</span></td></tr>
<tr><td class="num" id="LN52">52</td><td class="line"> </td></tr>
<tr><td class="num" id="LN53">53</td><td class="line"><span class='keyword'>static</span> <span class='keyword'>const</span> <span class='keyword'>double</span></td></tr>
<tr><td class="num" id="LN54">54</td><td class="line">bp[] = {1.0, 1.5,},</td></tr>
<tr><td class="num" id="LN55">55</td><td class="line">dp_h[] = { 0.0, 5.84962487220764160156e-01,}, <span class='comment'>/* 0x3FE2B803, 0x40000000 */</span></td></tr>
<tr><td class="num" id="LN56">56</td><td class="line">dp_l[] = { 0.0, 1.35003920212974897128e-08,}, <span class='comment'>/* 0x3E4CFDEB, 0x43CFD006 */</span></td></tr>
<tr><td class="num" id="LN57">57</td><td class="line">zero = 0.0,</td></tr>
<tr><td class="num" id="LN58">58</td><td class="line">one = 1.0,</td></tr>
<tr><td class="num" id="LN59">59</td><td class="line">two = 2.0,</td></tr>
<tr><td class="num" id="LN60">60</td><td class="line">two53 = 9007199254740992.0, <span class='comment'>/* 0x43400000, 0x00000000 */</span></td></tr>
<tr><td class="num" id="LN61">61</td><td class="line">huge = 1.0e300,</td></tr>
<tr><td class="num" id="LN62">62</td><td class="line">tiny = 1.0e-300,</td></tr>
<tr><td class="num" id="LN63">63</td><td class="line"> <span class='comment'>/* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */</span></td></tr>
<tr><td class="num" id="LN64">64</td><td class="line">L1 = 5.99999999999994648725e-01, <span class='comment'>/* 0x3FE33333, 0x33333303 */</span></td></tr>
<tr><td class="num" id="LN65">65</td><td class="line">L2 = 4.28571428578550184252e-01, <span class='comment'>/* 0x3FDB6DB6, 0xDB6FABFF */</span></td></tr>
<tr><td class="num" id="LN66">66</td><td class="line">L3 = 3.33333329818377432918e-01, <span class='comment'>/* 0x3FD55555, 0x518F264D */</span></td></tr>
<tr><td class="num" id="LN67">67</td><td class="line">L4 = 2.72728123808534006489e-01, <span class='comment'>/* 0x3FD17460, 0xA91D4101 */</span></td></tr>
<tr><td class="num" id="LN68">68</td><td class="line">L5 = 2.30660745775561754067e-01, <span class='comment'>/* 0x3FCD864A, 0x93C9DB65 */</span></td></tr>
<tr><td class="num" id="LN69">69</td><td class="line">L6 = 2.06975017800338417784e-01, <span class='comment'>/* 0x3FCA7E28, 0x4A454EEF */</span></td></tr>
<tr><td class="num" id="LN70">70</td><td class="line">P1 = 1.66666666666666019037e-01, <span class='comment'>/* 0x3FC55555, 0x5555553E */</span></td></tr>
<tr><td class="num" id="LN71">71</td><td class="line">P2 = -2.77777777770155933842e-03, <span class='comment'>/* 0xBF66C16C, 0x16BEBD93 */</span></td></tr>
<tr><td class="num" id="LN72">72</td><td class="line">P3 = 6.61375632143793436117e-05, <span class='comment'>/* 0x3F11566A, 0xAF25DE2C */</span></td></tr>
<tr><td class="num" id="LN73">73</td><td class="line">P4 = -1.65339022054652515390e-06, <span class='comment'>/* 0xBEBBBD41, 0xC5D26BF1 */</span></td></tr>
<tr><td class="num" id="LN74">74</td><td class="line">P5 = 4.13813679705723846039e-08, <span class='comment'>/* 0x3E663769, 0x72BEA4D0 */</span></td></tr>
<tr><td class="num" id="LN75">75</td><td class="line">lg2 = 6.93147180559945286227e-01, <span class='comment'>/* 0x3FE62E42, 0xFEFA39EF */</span></td></tr>
<tr><td class="num" id="LN76">76</td><td class="line">lg2_h = 6.93147182464599609375e-01, <span class='comment'>/* 0x3FE62E43, 0x00000000 */</span></td></tr>
<tr><td class="num" id="LN77">77</td><td class="line">lg2_l = -1.90465429995776804525e-09, <span class='comment'>/* 0xBE205C61, 0x0CA86C39 */</span></td></tr>
<tr><td class="num" id="LN78">78</td><td class="line">ovt = 8.0085662595372944372e-0017, <span class='comment'>/* -(1024-log2(ovfl+.5ulp)) */</span></td></tr>
<tr><td class="num" id="LN79">79</td><td class="line">cp = 9.61796693925975554329e-01, <span class='comment'>/* 0x3FEEC709, 0xDC3A03FD =2/(3ln2) */</span></td></tr>
<tr><td class="num" id="LN80">80</td><td class="line">cp_h = 9.61796700954437255859e-01, <span class='comment'>/* 0x3FEEC709, 0xE0000000 =(float)cp */</span></td></tr>
<tr><td class="num" id="LN81">81</td><td class="line">cp_l = -7.02846165095275826516e-09, <span class='comment'>/* 0xBE3E2FE0, 0x145B01F5 =tail of cp_h*/</span></td></tr>
<tr><td class="num" id="LN82">82</td><td class="line">ivln2 = 1.44269504088896338700e+00, <span class='comment'>/* 0x3FF71547, 0x652B82FE =1/ln2 */</span></td></tr>
<tr><td class="num" id="LN83">83</td><td class="line">ivln2_h = 1.44269502162933349609e+00, <span class='comment'>/* 0x3FF71547, 0x60000000 =24b 1/ln2*/</span></td></tr>
<tr><td class="num" id="LN84">84</td><td class="line">ivln2_l = 1.92596299112661746887e-08; <span class='comment'>/* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/</span></td></tr>
<tr><td class="num" id="LN85">85</td><td class="line"> </td></tr>
<tr><td class="num" id="LN86">86</td><td class="line"><span class='comment'>/**</span></td></tr>
<tr><td class="num" id="LN87">87</td><td class="line"> <span class='comment'>* @brief Expontation function.</span></td></tr>
<tr><td class="num" id="LN88">88</td><td class="line"> <span class='comment'>* @version 1.3</span></td></tr>
<tr><td class="num" id="LN89">89</td><td class="line"> <span class='comment'>* @date 95/01/18</span></td></tr>
<tr><td class="num" id="LN90">90</td><td class="line"> <span class='comment'>* @details</span></td></tr>
<tr><td class="num" id="LN91">91</td><td class="line"> <span class='comment'>* &lt;pre&gt;</span></td></tr>
<tr><td class="num" id="LN92">92</td><td class="line"> <span class='comment'>* Method: Let x = 2 * (1+f)</span></td></tr>
<tr><td class="num" id="LN93">93</td><td class="line"> <span class='comment'>* 1. Compute and return log2(x) in two pieces:</span></td></tr>
<tr><td class="num" id="LN94">94</td><td class="line"> <span class='comment'>* log2(x) = w1 + w2,</span></td></tr>
<tr><td class="num" id="LN95">95</td><td class="line"> <span class='comment'>* where w1 has 53-24 = 29 bit trailing zeros.</span></td></tr>
<tr><td class="num" id="LN96">96</td><td class="line"> <span class='comment'>* 2. Perform y*log2(x) = n+y' by simulating muti-precision</span></td></tr>
<tr><td class="num" id="LN97">97</td><td class="line"> <span class='comment'>* arithmetic, where |y'|&lt;=0.5.</span></td></tr>
<tr><td class="num" id="LN98">98</td><td class="line"> <span class='comment'>* 3. Return x**y = 2**n*exp(y'*log2)</span></td></tr>
<tr><td class="num" id="LN99">99</td><td class="line"> <span class='comment'>*</span></td></tr>
<tr><td class="num" id="LN100">100</td><td class="line"> <span class='comment'>* Special cases:</span></td></tr>
<tr><td class="num" id="LN101">101</td><td class="line"> <span class='comment'>* 1. (anything) ** 0 is 1</span></td></tr>
<tr><td class="num" id="LN102">102</td><td class="line"> <span class='comment'>* 2. (anything) ** 1 is itself</span></td></tr>
<tr><td class="num" id="LN103">103</td><td class="line"> <span class='comment'>* 3. (anything) ** NAN is NAN</span></td></tr>
<tr><td class="num" id="LN104">104</td><td class="line"> <span class='comment'>* 4. NAN ** (anything except 0) is NAN</span></td></tr>
<tr><td class="num" id="LN105">105</td><td class="line"> <span class='comment'>* 5. +-(|x| &gt; 1) ** +INF is +INF</span></td></tr>
<tr><td class="num" id="LN106">106</td><td class="line"> <span class='comment'>* 6. +-(|x| &gt; 1) ** -INF is +0</span></td></tr>
<tr><td class="num" id="LN107">107</td><td class="line"> <span class='comment'>* 7. +-(|x| &lt; 1) ** +INF is +0</span></td></tr>
<tr><td class="num" id="LN108">108</td><td class="line"> <span class='comment'>* 8. +-(|x| &lt; 1) ** -INF is +INF</span></td></tr>
<tr><td class="num" id="LN109">109</td><td class="line"> <span class='comment'>* 9. +-1 ** +-INF is NAN</span></td></tr>
<tr><td class="num" id="LN110">110</td><td class="line"> <span class='comment'>* 10. +0 ** (+anything except 0, NAN) is +0</span></td></tr>
<tr><td class="num" id="LN111">111</td><td class="line"> <span class='comment'>* 11. -0 ** (+anything except 0, NAN, odd integer) is +0</span></td></tr>
<tr><td class="num" id="LN112">112</td><td class="line"> <span class='comment'>* 12. +0 ** (-anything except 0, NAN) is +INF</span></td></tr>
<tr><td class="num" id="LN113">113</td><td class="line"> <span class='comment'>* 13. -0 ** (-anything except 0, NAN, odd integer) is +INF</span></td></tr>
<tr><td class="num" id="LN114">114</td><td class="line"> <span class='comment'>* 14. -0 ** (odd integer) = -( +0 ** (odd integer) )</span></td></tr>
<tr><td class="num" id="LN115">115</td><td class="line"> <span class='comment'>* 15. +INF ** (+anything except 0,NAN) is +INF</span></td></tr>
<tr><td class="num" id="LN116">116</td><td class="line"> <span class='comment'>* 16. +INF ** (-anything except 0,NAN) is +0</span></td></tr>
<tr><td class="num" id="LN117">117</td><td class="line"> <span class='comment'>* 17. -INF ** (anything) = -0 ** (-anything)</span></td></tr>
<tr><td class="num" id="LN118">118</td><td class="line"> <span class='comment'>* 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer)</span></td></tr>
<tr><td class="num" id="LN119">119</td><td class="line"> <span class='comment'>* 19. (-anything except 0 and inf) ** (non-integer) is NAN</span></td></tr>
<tr><td class="num" id="LN120">120</td><td class="line"> <span class='comment'>*</span></td></tr>
<tr><td class="num" id="LN121">121</td><td class="line"> <span class='comment'>* Accuracy:</span></td></tr>
<tr><td class="num" id="LN122">122</td><td class="line"> <span class='comment'>* pow(x,y) returns x**y nearly rounded. In particular</span></td></tr>
<tr><td class="num" id="LN123">123</td><td class="line"> <span class='comment'>* pow(integer,integer)</span></td></tr>
<tr><td class="num" id="LN124">124</td><td class="line"> <span class='comment'>* always returns the correct integer provided it is</span></td></tr>
<tr><td class="num" id="LN125">125</td><td class="line"> <span class='comment'>* representable.</span></td></tr>
<tr><td class="num" id="LN126">126</td><td class="line"> <span class='comment'>*</span></td></tr>
<tr><td class="num" id="LN127">127</td><td class="line"> <span class='comment'>* Constants :</span></td></tr>
<tr><td class="num" id="LN128">128</td><td class="line"> <span class='comment'>* The hexadecimal values are the intended ones for the following</span></td></tr>
<tr><td class="num" id="LN129">129</td><td class="line"> <span class='comment'>* constants. The decimal values may be used, provided that the</span></td></tr>
<tr><td class="num" id="LN130">130</td><td class="line"> <span class='comment'>* compiler will convert from decimal to binary accurately enough</span></td></tr>
<tr><td class="num" id="LN131">131</td><td class="line"> <span class='comment'>* to produce the hexadecimal values shown.</span></td></tr>
<tr><td class="num" id="LN132">132</td><td class="line"> <span class='comment'>* &lt;/pre&gt;</span></td></tr>
<tr><td class="num" id="LN133">133</td><td class="line"> <span class='comment'>* @copyright Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.</span></td></tr>
<tr><td class="num" id="LN134">134</td><td class="line"> <span class='comment'>* @license Developed at SunSoft, a Sun Microsystems, Inc. business. Permission</span></td></tr>
<tr><td class="num" id="LN135">135</td><td class="line"> <span class='comment'>* to use, copy, modify, and distribute this software is freely granted,</span></td></tr>
<tr><td class="num" id="LN136">136</td><td class="line"> <span class='comment'>* provided that this notice is preserved.</span></td></tr>
<tr><td class="num" id="LN137">137</td><td class="line"> <span class='comment'>*/</span></td></tr>
<tr><td class="num" id="LN138">138</td><td class="line"> </td></tr>
<tr><td class="num" id="LN139">139</td><td class="line"><span class='keyword'>double</span> pow(<span class='keyword'>double</span> x, <span class='keyword'>double</span> y)</td></tr>
<tr><td class="num" id="LN140">140</td><td class="line">{</td></tr>
<tr><td class="num" id="LN141">141</td><td class="line"> <span class='keyword'>double</span> z,ax,z_h,z_l,p_h,p_l;</td></tr>
<tr><td class="num" id="LN142">142</td><td class="line"> <span class='keyword'>double</span> y1,t1,t2,r,s,t,u,v,w;</td></tr>
<tr><td class="num" id="LN143">143</td><td class="line"> sword i0,i1,i,j,k,yisint,n;</td></tr>
<tr><td class="num" id="LN144">144</td><td class="line"> sword hx,hy,ix,iy;</td></tr>
<tr><td class="num" id="LN145">145</td><td class="line"> uword lx,ly;</td></tr>
<tr><td class="num" id="LN146">146</td><td class="line"> </td></tr>
<tr><td class="num" id="LN147">147</td><td class="line"> i0 = ((*(<span class='keyword'>int</span>*)&amp;one)&gt;&gt;29)^1;</td></tr>
<tr><td class="num" id="LN148">148</td><td class="line"> i1=<span class="mrange">1-i0</span>;</td></tr>
<tr><td class="num"></td><td class="line"><div id="EndPath" class="msg msgEvent" style="margin-left:5ex">Value stored to 'i1' is never read</div></td></tr>
<tr><td class="num" id="LN149">149</td><td class="line"> <span class='macro'>EXTRACT_WORDS(hx,lx,x)<span class='expansion'>do { ieee_double_shape_type ew_u; ew_u.value = (x); (hx) = ew_u<br>.parts.msw; (lx) = ew_u.parts.lsw; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN150">150</td><td class="line"> <span class='macro'>EXTRACT_WORDS(hy,ly,y)<span class='expansion'>do { ieee_double_shape_type ew_u; ew_u.value = (y); (hy) = ew_u<br>.parts.msw; (ly) = ew_u.parts.lsw; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN151">151</td><td class="line"> ix = hx&amp;0x7fffffff;</td></tr>
<tr><td class="num" id="LN152">152</td><td class="line"> iy = hy&amp;0x7fffffff;</td></tr>
<tr><td class="num" id="LN153">153</td><td class="line"> </td></tr>
<tr><td class="num" id="LN154">154</td><td class="line"> <span class='comment'>/* y==zero: x**0 = 1 */</span></td></tr>
<tr><td class="num" id="LN155">155</td><td class="line"> <span class='keyword'>if</span>((iy|ly)==0) <span class='keyword'>return</span> one;</td></tr>
<tr><td class="num" id="LN156">156</td><td class="line"> </td></tr>
<tr><td class="num" id="LN157">157</td><td class="line"> <span class='comment'>/* +-NaN return x+y */</span></td></tr>
<tr><td class="num" id="LN158">158</td><td class="line"> <span class='keyword'>if</span>(ix &gt; 0x7ff00000 || ((ix==0x7ff00000)&amp;&amp;(lx!=0)) ||</td></tr>
<tr><td class="num" id="LN159">159</td><td class="line"> iy &gt; 0x7ff00000 || ((iy==0x7ff00000)&amp;&amp;(ly!=0)))</td></tr>
<tr><td class="num" id="LN160">160</td><td class="line"> <span class='keyword'>return</span> x+y;</td></tr>
<tr><td class="num" id="LN161">161</td><td class="line"> </td></tr>
<tr><td class="num" id="LN162">162</td><td class="line"> <span class='comment'>/* determine if y is an odd int when x &lt; 0</span></td></tr>
<tr><td class="num" id="LN163">163</td><td class="line"> <span class='comment'>* yisint = 0 ... y is not an integer</span></td></tr>
<tr><td class="num" id="LN164">164</td><td class="line"> <span class='comment'>* yisint = 1 ... y is an odd int</span></td></tr>
<tr><td class="num" id="LN165">165</td><td class="line"> <span class='comment'>* yisint = 2 ... y is an even int</span></td></tr>
<tr><td class="num" id="LN166">166</td><td class="line"> <span class='comment'>*/</span></td></tr>
<tr><td class="num" id="LN167">167</td><td class="line"> yisint = 0;</td></tr>
<tr><td class="num" id="LN168">168</td><td class="line"> <span class='keyword'>if</span>(hx&lt;0) {</td></tr>
<tr><td class="num" id="LN169">169</td><td class="line"> <span class='keyword'>if</span>(iy&gt;=0x43400000) yisint = 2; <span class='comment'>/* even integer y */</span></td></tr>
<tr><td class="num" id="LN170">170</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span>(iy&gt;=0x3ff00000) {</td></tr>
<tr><td class="num" id="LN171">171</td><td class="line"> k = (iy&gt;&gt;20)-0x3ff; <span class='comment'>/* exponent */</span></td></tr>
<tr><td class="num" id="LN172">172</td><td class="line"> <span class='keyword'>if</span>(k&gt;20) {</td></tr>
<tr><td class="num" id="LN173">173</td><td class="line"> j = ly&gt;&gt;(52-k);</td></tr>
<tr><td class="num" id="LN174">174</td><td class="line"> <span class='keyword'>if</span>((uword)(j&lt;&lt;(52-k))==ly) yisint = 2-(j&amp;1);</td></tr>
<tr><td class="num" id="LN175">175</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span>(ly==0) {</td></tr>
<tr><td class="num" id="LN176">176</td><td class="line"> j = iy&gt;&gt;(20-k);</td></tr>
<tr><td class="num" id="LN177">177</td><td class="line"> <span class='keyword'>if</span>((j&lt;&lt;(20-k))==iy) yisint = 2-(j&amp;1);</td></tr>
<tr><td class="num" id="LN178">178</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN179">179</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN180">180</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN181">181</td><td class="line"> </td></tr>
<tr><td class="num" id="LN182">182</td><td class="line"> <span class='comment'>/* special value of y */</span></td></tr>
<tr><td class="num" id="LN183">183</td><td class="line"> <span class='keyword'>if</span>(ly==0) {</td></tr>
<tr><td class="num" id="LN184">184</td><td class="line"> <span class='keyword'>if</span> (iy==0x7ff00000) { <span class='comment'>/* y is +-inf */</span></td></tr>
<tr><td class="num" id="LN185">185</td><td class="line"> <span class='keyword'>if</span>(((ix-0x3ff00000)|lx)==0)</td></tr>
<tr><td class="num" id="LN186">186</td><td class="line"> <span class='keyword'>return</span> y - y; <span class='comment'>/* inf**+-1 is NaN */</span></td></tr>
<tr><td class="num" id="LN187">187</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span> (ix &gt;= 0x3ff00000)<span class='comment'>/* (|x|&gt;1)**+-inf = inf,0 */</span></td></tr>
<tr><td class="num" id="LN188">188</td><td class="line"> <span class='keyword'>return</span> (hy&gt;=0)? y: zero;</td></tr>
<tr><td class="num" id="LN189">189</td><td class="line"> <span class='keyword'>else</span> <span class='comment'>/* (|x|&lt;1)**-,+inf = inf,0 */</span></td></tr>
<tr><td class="num" id="LN190">190</td><td class="line"> <span class='keyword'>return</span> (hy&lt;0)?-y: zero;</td></tr>
<tr><td class="num" id="LN191">191</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN192">192</td><td class="line"> <span class='keyword'>if</span>(iy==0x3ff00000) { <span class='comment'>/* y is +-1 */</span></td></tr>
<tr><td class="num" id="LN193">193</td><td class="line"> <span class='keyword'>if</span>(hy&lt;0) <span class='keyword'>return</span> one/x;</td></tr>
<tr><td class="num" id="LN194">194</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>return</span> x;</td></tr>
<tr><td class="num" id="LN195">195</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN196">196</td><td class="line"> <span class='keyword'>if</span>(hy==0x40000000) <span class='keyword'>return</span> x*x; <span class='comment'>/* y is 2 */</span></td></tr>
<tr><td class="num" id="LN197">197</td><td class="line"> <span class='keyword'>if</span>(hy==0x3fe00000) { <span class='comment'>/* y is 0.5 */</span></td></tr>
<tr><td class="num" id="LN198">198</td><td class="line"> <span class='keyword'>if</span>(hx&gt;=0) <span class='comment'>/* x &gt;= +0 */</span></td></tr>
<tr><td class="num" id="LN199">199</td><td class="line"> <span class='keyword'>return</span> sqrt(x);</td></tr>
<tr><td class="num" id="LN200">200</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN201">201</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN202">202</td><td class="line"> </td></tr>
<tr><td class="num" id="LN203">203</td><td class="line"> ax = fabs(x);</td></tr>
<tr><td class="num" id="LN204">204</td><td class="line"> <span class='comment'>/* special value of x */</span></td></tr>
<tr><td class="num" id="LN205">205</td><td class="line"> <span class='keyword'>if</span>(lx==0) {</td></tr>
<tr><td class="num" id="LN206">206</td><td class="line"> <span class='keyword'>if</span>(ix==0x7ff00000||ix==0||ix==0x3ff00000) {</td></tr>
<tr><td class="num" id="LN207">207</td><td class="line"> z = ax; <span class='comment'>/*x is +-0,+-inf,+-1*/</span></td></tr>
<tr><td class="num" id="LN208">208</td><td class="line"> <span class='keyword'>if</span>(hy&lt;0) z = one/z; <span class='comment'>/* z = (1/|x|) */</span></td></tr>
<tr><td class="num" id="LN209">209</td><td class="line"> <span class='keyword'>if</span>(hx&lt;0) {</td></tr>
<tr><td class="num" id="LN210">210</td><td class="line"> <span class='keyword'>if</span>(((ix-0x3ff00000)|yisint)==0) {</td></tr>
<tr><td class="num" id="LN211">211</td><td class="line"> z = (z-z)/(z-z); <span class='comment'>/* (-1)**non-int is NaN */</span></td></tr>
<tr><td class="num" id="LN212">212</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span>(yisint==1)</td></tr>
<tr><td class="num" id="LN213">213</td><td class="line"> z = -z; <span class='comment'>/* (x&lt;0)**odd = -(|x|**odd) */</span></td></tr>
<tr><td class="num" id="LN214">214</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN215">215</td><td class="line"> <span class='keyword'>return</span> z;</td></tr>
<tr><td class="num" id="LN216">216</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN217">217</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN218">218</td><td class="line"> </td></tr>
<tr><td class="num" id="LN219">219</td><td class="line"> n = (hx&gt;&gt;31)+1;</td></tr>
<tr><td class="num" id="LN220">220</td><td class="line"> </td></tr>
<tr><td class="num" id="LN221">221</td><td class="line"> <span class='comment'>/* (x&lt;0)**(non-int) is NaN */</span></td></tr>
<tr><td class="num" id="LN222">222</td><td class="line"> <span class='keyword'>if</span>((n|yisint)==0) <span class='keyword'>return</span> (x-x)/(x-x);</td></tr>
<tr><td class="num" id="LN223">223</td><td class="line"> </td></tr>
<tr><td class="num" id="LN224">224</td><td class="line"> s = one; <span class='comment'>/* s (sign of result -ve**odd) = -1 else = 1 */</span></td></tr>
<tr><td class="num" id="LN225">225</td><td class="line"> <span class='keyword'>if</span>((n|(yisint-1))==0) s = -one;<span class='comment'>/* (-ve)**(odd int) */</span></td></tr>
<tr><td class="num" id="LN226">226</td><td class="line"> </td></tr>
<tr><td class="num" id="LN227">227</td><td class="line"> <span class='comment'>/* |y| is huge */</span></td></tr>
<tr><td class="num" id="LN228">228</td><td class="line"> <span class='keyword'>if</span>(iy&gt;0x41e00000) { <span class='comment'>/* if |y| &gt; 2**31 */</span></td></tr>
<tr><td class="num" id="LN229">229</td><td class="line"> <span class='keyword'>if</span>(iy&gt;0x43f00000) { <span class='comment'>/* if |y| &gt; 2**64, must o/uflow */</span></td></tr>
<tr><td class="num" id="LN230">230</td><td class="line"> <span class='keyword'>if</span>(ix&lt;=0x3fefffff) <span class='keyword'>return</span> (hy&lt;0)? huge*huge:tiny*tiny;</td></tr>
<tr><td class="num" id="LN231">231</td><td class="line"> <span class='keyword'>if</span>(ix&gt;=0x3ff00000) <span class='keyword'>return</span> (hy&gt;0)? huge*huge:tiny*tiny;</td></tr>
<tr><td class="num" id="LN232">232</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN233">233</td><td class="line"> <span class='comment'>/* over/underflow if x is not close to one */</span></td></tr>
<tr><td class="num" id="LN234">234</td><td class="line"> <span class='keyword'>if</span>(ix&lt;0x3fefffff) <span class='keyword'>return</span> (hy&lt;0)? s*huge*huge:s*tiny*tiny;</td></tr>
<tr><td class="num" id="LN235">235</td><td class="line"> <span class='keyword'>if</span>(ix&gt;0x3ff00000) <span class='keyword'>return</span> (hy&gt;0)? s*huge*huge:s*tiny*tiny;</td></tr>
<tr><td class="num" id="LN236">236</td><td class="line"> <span class='comment'>/* now |1-x| is tiny &lt;= 2**-20, suffice to compute</span></td></tr>
<tr><td class="num" id="LN237">237</td><td class="line"> <span class='comment'>log(x) by x-x^2/2+x^3/3-x^4/4 */</span></td></tr>
<tr><td class="num" id="LN238">238</td><td class="line"> t = ax-one; <span class='comment'>/* t has 20 trailing zeros */</span></td></tr>
<tr><td class="num" id="LN239">239</td><td class="line"> w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25));</td></tr>
<tr><td class="num" id="LN240">240</td><td class="line"> u = ivln2_h*t; <span class='comment'>/* ivln2_h has 21 sig. bits */</span></td></tr>
<tr><td class="num" id="LN241">241</td><td class="line"> v = t*ivln2_l-w*ivln2;</td></tr>
<tr><td class="num" id="LN242">242</td><td class="line"> t1 = u+v;</td></tr>
<tr><td class="num" id="LN243">243</td><td class="line"> <span class='macro'>SET_LOW_WORD(t1,0)<span class='expansion'>do { ieee_double_shape_type sl_u; sl_u.value = (t1); sl_u.parts<br>.lsw = (0); (t1) = sl_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN244">244</td><td class="line"> t2 = v-(t1-u);</td></tr>
<tr><td class="num" id="LN245">245</td><td class="line"> } <span class='keyword'>else</span> {</td></tr>
<tr><td class="num" id="LN246">246</td><td class="line"> <span class='keyword'>double</span> ss,s2,s_h,s_l,t_h,t_l;</td></tr>
<tr><td class="num" id="LN247">247</td><td class="line"> n = 0;</td></tr>
<tr><td class="num" id="LN248">248</td><td class="line"> <span class='comment'>/* take care subnormal number */</span></td></tr>
<tr><td class="num" id="LN249">249</td><td class="line"> <span class='keyword'>if</span>(ix&lt;0x00100000)</td></tr>
<tr><td class="num" id="LN250">250</td><td class="line"> {</td></tr>
<tr><td class="num" id="LN251">251</td><td class="line"> ax *= two53;</td></tr>
<tr><td class="num" id="LN252">252</td><td class="line"> n -= 53;</td></tr>
<tr><td class="num" id="LN253">253</td><td class="line"> <span class='macro'>GET_HIGH_WORD(ix,ax)<span class='expansion'>do { ieee_double_shape_type gh_u; gh_u.value = (ax); (ix) = gh_u<br>.parts.msw; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN254">254</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN255">255</td><td class="line"> n += ((ix)&gt;&gt;20)-0x3ff;</td></tr>
<tr><td class="num" id="LN256">256</td><td class="line"> j = ix&amp;0x000fffff;</td></tr>
<tr><td class="num" id="LN257">257</td><td class="line"> <span class='comment'>/* determine interval */</span></td></tr>
<tr><td class="num" id="LN258">258</td><td class="line"> ix = j|0x3ff00000; <span class='comment'>/* normalize ix */</span></td></tr>
<tr><td class="num" id="LN259">259</td><td class="line"> <span class='keyword'>if</span>(j&lt;=0x3988E) k=0; <span class='comment'>/* |x|&lt;sqrt(3/2) */</span></td></tr>
<tr><td class="num" id="LN260">260</td><td class="line"> <span class='keyword'>else</span> <span class='keyword'>if</span>(j&lt;0xBB67A) k=1; <span class='comment'>/* |x|&lt;sqrt(3) */</span></td></tr>
<tr><td class="num" id="LN261">261</td><td class="line"> <span class='keyword'>else</span> {</td></tr>
<tr><td class="num" id="LN262">262</td><td class="line"> k=0;</td></tr>
<tr><td class="num" id="LN263">263</td><td class="line"> n+=1;</td></tr>
<tr><td class="num" id="LN264">264</td><td class="line"> ix -= 0x00100000;</td></tr>
<tr><td class="num" id="LN265">265</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN266">266</td><td class="line"> <span class='macro'>SET_HIGH_WORD(ax,ix)<span class='expansion'>do { ieee_double_shape_type sh_u; sh_u.value = (ax); sh_u.parts<br>.msw = (ix); (ax) = sh_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN267">267</td><td class="line"> </td></tr>
<tr><td class="num" id="LN268">268</td><td class="line"> <span class='comment'>/* compute ss = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */</span></td></tr>
<tr><td class="num" id="LN269">269</td><td class="line"> u = ax-bp[k]; <span class='comment'>/* bp[0]=1.0, bp[1]=1.5 */</span></td></tr>
<tr><td class="num" id="LN270">270</td><td class="line"> v = one/(ax+bp[k]);</td></tr>
<tr><td class="num" id="LN271">271</td><td class="line"> ss = u*v;</td></tr>
<tr><td class="num" id="LN272">272</td><td class="line"> s_h = ss;</td></tr>
<tr><td class="num" id="LN273">273</td><td class="line"> <span class='macro'>SET_LOW_WORD(s_h,0)<span class='expansion'>do { ieee_double_shape_type sl_u; sl_u.value = (s_h); sl_u.parts<br>.lsw = (0); (s_h) = sl_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN274">274</td><td class="line"> <span class='comment'>/* t_h=ax+bp[k] High */</span></td></tr>
<tr><td class="num" id="LN275">275</td><td class="line"> t_h = zero;</td></tr>
<tr><td class="num" id="LN276">276</td><td class="line"> <span class='macro'>SET_HIGH_WORD(t_h,((ix&gt;&gt;1)|0x20000000)+0x00080000+(k&lt;&lt;18))<span class='expansion'>do { ieee_double_shape_type sh_u; sh_u.value = (t_h); sh_u.parts<br>.msw = (((ix&gt;&gt;1)|0x20000000)+0x00080000+(k&lt;&lt;18));<br> (t_h) = sh_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN277">277</td><td class="line"> t_l = ax - (t_h-bp[k]);</td></tr>
<tr><td class="num" id="LN278">278</td><td class="line"> s_l = v*((u-s_h*t_h)-s_h*t_l);</td></tr>
<tr><td class="num" id="LN279">279</td><td class="line"> <span class='comment'>/* compute log(ax) */</span></td></tr>
<tr><td class="num" id="LN280">280</td><td class="line"> s2 = ss*ss;</td></tr>
<tr><td class="num" id="LN281">281</td><td class="line"> r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));</td></tr>
<tr><td class="num" id="LN282">282</td><td class="line"> r += s_l*(s_h+ss);</td></tr>
<tr><td class="num" id="LN283">283</td><td class="line"> s2 = s_h*s_h;</td></tr>
<tr><td class="num" id="LN284">284</td><td class="line"> t_h = 3.0+s2+r;</td></tr>
<tr><td class="num" id="LN285">285</td><td class="line"> <span class='macro'>SET_LOW_WORD(t_h,0)<span class='expansion'>do { ieee_double_shape_type sl_u; sl_u.value = (t_h); sl_u.parts<br>.lsw = (0); (t_h) = sl_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN286">286</td><td class="line"> t_l = r-((t_h-3.0)-s2);</td></tr>
<tr><td class="num" id="LN287">287</td><td class="line"> <span class='comment'>/* u+v = ss*(1+...) */</span></td></tr>
<tr><td class="num" id="LN288">288</td><td class="line"> u = s_h*t_h;</td></tr>
<tr><td class="num" id="LN289">289</td><td class="line"> v = s_l*t_h+t_l*ss;</td></tr>
<tr><td class="num" id="LN290">290</td><td class="line"> <span class='comment'>/* 2/(3log2)*(ss+...) */</span></td></tr>
<tr><td class="num" id="LN291">291</td><td class="line"> p_h = u+v;</td></tr>
<tr><td class="num" id="LN292">292</td><td class="line"> <span class='macro'>SET_LOW_WORD(p_h,0)<span class='expansion'>do { ieee_double_shape_type sl_u; sl_u.value = (p_h); sl_u.parts<br>.lsw = (0); (p_h) = sl_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN293">293</td><td class="line"> p_l = v-(p_h-u);</td></tr>
<tr><td class="num" id="LN294">294</td><td class="line"> z_h = cp_h*p_h; <span class='comment'>/* cp_h+cp_l = 2/(3*log2) */</span></td></tr>
<tr><td class="num" id="LN295">295</td><td class="line"> z_l = cp_l*p_h+p_l*cp+dp_l[k];</td></tr>
<tr><td class="num" id="LN296">296</td><td class="line"> <span class='comment'>/* log2(ax) = (ss+..)*2/(3*log2) = n + dp_h + z_h + z_l */</span></td></tr>
<tr><td class="num" id="LN297">297</td><td class="line"> t = (<span class='keyword'>double</span>)n;</td></tr>
<tr><td class="num" id="LN298">298</td><td class="line"> t1 = (((z_h+z_l)+dp_h[k])+t);</td></tr>
<tr><td class="num" id="LN299">299</td><td class="line"> <span class='macro'>SET_LOW_WORD(t1,0)<span class='expansion'>do { ieee_double_shape_type sl_u; sl_u.value = (t1); sl_u.parts<br>.lsw = (0); (t1) = sl_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN300">300</td><td class="line"> t2 = z_l-(((t1-t)-dp_h[k])-z_h);</td></tr>
<tr><td class="num" id="LN301">301</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN302">302</td><td class="line"> </td></tr>
<tr><td class="num" id="LN303">303</td><td class="line"> <span class='comment'>/* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */</span></td></tr>
<tr><td class="num" id="LN304">304</td><td class="line"> y1 = y;</td></tr>
<tr><td class="num" id="LN305">305</td><td class="line"> <span class='macro'>SET_LOW_WORD(y1,0)<span class='expansion'>do { ieee_double_shape_type sl_u; sl_u.value = (y1); sl_u.parts<br>.lsw = (0); (y1) = sl_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN306">306</td><td class="line"> p_l = (y-y1)*t1+y*t2;</td></tr>
<tr><td class="num" id="LN307">307</td><td class="line"> p_h = y1*t1;</td></tr>
<tr><td class="num" id="LN308">308</td><td class="line"> z = p_l+p_h;</td></tr>
<tr><td class="num" id="LN309">309</td><td class="line"> <span class='macro'>EXTRACT_WORDS(j,i,z)<span class='expansion'>do { ieee_double_shape_type ew_u; ew_u.value = (z); (j) = ew_u<br>.parts.msw; (i) = ew_u.parts.lsw; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN310">310</td><td class="line"> <span class='keyword'>if</span> (j&gt;=0x40900000) { <span class='comment'>/* z &gt;= 1024 */</span></td></tr>
<tr><td class="num" id="LN311">311</td><td class="line"> <span class='keyword'>if</span>(((j-0x40900000)|i)!=0) <span class='comment'>/* if z &gt; 1024 */</span></td></tr>
<tr><td class="num" id="LN312">312</td><td class="line"> <span class='keyword'>return</span> s*huge*huge; <span class='comment'>/* overflow */</span></td></tr>
<tr><td class="num" id="LN313">313</td><td class="line"> <span class='keyword'>else</span> {</td></tr>
<tr><td class="num" id="LN314">314</td><td class="line"> <span class='keyword'>if</span>(p_l+ovt&gt;z-p_h) <span class='keyword'>return</span> s*huge*huge; <span class='comment'>/* overflow */</span></td></tr>
<tr><td class="num" id="LN315">315</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN316">316</td><td class="line"> } <span class='keyword'>else</span> <span class='keyword'>if</span>((j&amp;0x7fffffff)&gt;=0x4090cc00 ) { <span class='comment'>/* z &lt;= -1075 */</span></td></tr>
<tr><td class="num" id="LN317">317</td><td class="line"> <span class='keyword'>if</span>(((j-0xc090cc00)|i)!=0) <span class='comment'>/* z &lt; -1075 */</span></td></tr>
<tr><td class="num" id="LN318">318</td><td class="line"> <span class='keyword'>return</span> s*tiny*tiny; <span class='comment'>/* underflow */</span></td></tr>
<tr><td class="num" id="LN319">319</td><td class="line"> <span class='keyword'>else</span> {</td></tr>
<tr><td class="num" id="LN320">320</td><td class="line"> <span class='keyword'>if</span>(p_l&lt;=z-p_h) <span class='keyword'>return</span> s*tiny*tiny; <span class='comment'>/* underflow */</span></td></tr>
<tr><td class="num" id="LN321">321</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN322">322</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN323">323</td><td class="line"> <span class='comment'>/*</span></td></tr>
<tr><td class="num" id="LN324">324</td><td class="line"> <span class='comment'>* compute 2**(p_h+p_l)</span></td></tr>
<tr><td class="num" id="LN325">325</td><td class="line"> <span class='comment'>*/</span></td></tr>
<tr><td class="num" id="LN326">326</td><td class="line"> i = j&amp;0x7fffffff;</td></tr>
<tr><td class="num" id="LN327">327</td><td class="line"> k = (i&gt;&gt;20)-0x3ff;</td></tr>
<tr><td class="num" id="LN328">328</td><td class="line"> n = 0;</td></tr>
<tr><td class="num" id="LN329">329</td><td class="line"> <span class='keyword'>if</span>(i&gt;0x3fe00000) { <span class='comment'>/* if |z| &gt; 0.5, set n = [z+0.5] */</span></td></tr>
<tr><td class="num" id="LN330">330</td><td class="line"> n = j+(0x00100000&gt;&gt;(k+1));</td></tr>
<tr><td class="num" id="LN331">331</td><td class="line"> k = ((n&amp;0x7fffffff)&gt;&gt;20)-0x3ff; <span class='comment'>/* new k for n */</span></td></tr>
<tr><td class="num" id="LN332">332</td><td class="line"> t = zero;</td></tr>
<tr><td class="num" id="LN333">333</td><td class="line"> <span class='macro'>SET_HIGH_WORD(t,(n&amp;~(0x000fffff&gt;&gt;k)))<span class='expansion'>do { ieee_double_shape_type sh_u; sh_u.value = (t); sh_u.parts<br>.msw = ((n&amp;~(0x000fffff&gt;&gt;k))); (t) = sh_u.value; } while<br> (0)</span></span>;</td></tr>
<tr><td class="num" id="LN334">334</td><td class="line"> n = ((n&amp;0x000fffff)|0x00100000)&gt;&gt;(20-k);</td></tr>
<tr><td class="num" id="LN335">335</td><td class="line"> <span class='keyword'>if</span>(j&lt;0) n = -n;</td></tr>
<tr><td class="num" id="LN336">336</td><td class="line"> p_h -= t;</td></tr>
<tr><td class="num" id="LN337">337</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN338">338</td><td class="line"> t = p_l+p_h;</td></tr>
<tr><td class="num" id="LN339">339</td><td class="line"> <span class='macro'>SET_LOW_WORD(t,0)<span class='expansion'>do { ieee_double_shape_type sl_u; sl_u.value = (t); sl_u.parts<br>.lsw = (0); (t) = sl_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN340">340</td><td class="line"> u = t*lg2_h;</td></tr>
<tr><td class="num" id="LN341">341</td><td class="line"> v = (p_l-(t-p_h))*lg2+t*lg2_l;</td></tr>
<tr><td class="num" id="LN342">342</td><td class="line"> z = u+v;</td></tr>
<tr><td class="num" id="LN343">343</td><td class="line"> w = v-(z-u);</td></tr>
<tr><td class="num" id="LN344">344</td><td class="line"> t = z*z;</td></tr>
<tr><td class="num" id="LN345">345</td><td class="line"> t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));</td></tr>
<tr><td class="num" id="LN346">346</td><td class="line"> r = (z*t1)/(t1-two)-(w+z*w);</td></tr>
<tr><td class="num" id="LN347">347</td><td class="line"> z = one-(r-z);</td></tr>
<tr><td class="num" id="LN348">348</td><td class="line"> <span class='macro'>GET_HIGH_WORD(j,z)<span class='expansion'>do { ieee_double_shape_type gh_u; gh_u.value = (z); (j) = gh_u<br>.parts.msw; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN349">349</td><td class="line"> j += (n&lt;&lt;20);</td></tr>
<tr><td class="num" id="LN350">350</td><td class="line"> <span class='keyword'>if</span>((j&gt;&gt;20)&lt;=0) z = scalbn(z,n); <span class='comment'>/* subnormal output */</span></td></tr>
<tr><td class="num" id="LN351">351</td><td class="line"> <span class='keyword'>else</span></td></tr>
<tr><td class="num" id="LN352">352</td><td class="line"> {</td></tr>
<tr><td class="num" id="LN353">353</td><td class="line"> uword hz;</td></tr>
<tr><td class="num" id="LN354">354</td><td class="line"> <span class='macro'>GET_HIGH_WORD(hz,z)<span class='expansion'>do { ieee_double_shape_type gh_u; gh_u.value = (z); (hz) = gh_u<br>.parts.msw; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN355">355</td><td class="line"> <span class='macro'>SET_HIGH_WORD(z,hz + (n&lt;&lt;20))<span class='expansion'>do { ieee_double_shape_type sh_u; sh_u.value = (z); sh_u.parts<br>.msw = (hz + (n&lt;&lt;20)); (z) = sh_u.value; } while (0)</span></span>;</td></tr>
<tr><td class="num" id="LN356">356</td><td class="line"> }</td></tr>
<tr><td class="num" id="LN357">357</td><td class="line"> <span class='keyword'>return</span> s*z;</td></tr>
<tr><td class="num" id="LN358">358</td><td class="line">}</td></tr>
</table></body></html>