long-decimal 0.01.00 → 0.01.01
Sign up to get free protection for your applications and to get access to all the features.
- data/README +6 -3
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/doc/classes/LongDecimal.html +207 -189
- data/doc/classes/LongDecimal.src/M000036.html +1 -1
- data/doc/classes/LongDecimal.src/M000037.html +1 -1
- data/doc/classes/LongDecimal.src/M000038.html +1 -1
- data/doc/classes/LongDecimal.src/M000039.html +1 -1
- data/doc/classes/LongDecimal.src/M000040.html +1 -1
- data/doc/classes/LongDecimal.src/M000041.html +1 -1
- data/doc/classes/LongDecimal.src/M000042.html +1 -1
- data/doc/classes/LongDecimal.src/M000043.html +1 -1
- data/doc/classes/LongDecimal.src/M000044.html +1 -1
- data/doc/classes/LongDecimal.src/M000045.html +1 -1
- data/doc/classes/LongDecimal.src/M000046.html +1 -1
- data/doc/classes/LongDecimal.src/M000047.html +1 -1
- data/doc/classes/LongDecimal.src/M000048.html +1 -1
- data/doc/classes/LongDecimal.src/M000049.html +1 -1
- data/doc/classes/LongDecimal.src/M000050.html +15 -2
- data/doc/classes/LongDecimal.src/M000051.html +1 -1
- data/doc/classes/LongDecimal.src/M000052.html +2 -2
- data/doc/classes/LongDecimal.src/M000053.html +1 -1
- data/doc/classes/LongDecimal.src/M000054.html +1 -1
- data/doc/classes/LongDecimal.src/M000055.html +1 -1
- data/doc/classes/LongDecimal.src/M000056.html +1 -1
- data/doc/classes/LongDecimal.src/M000057.html +1 -1
- data/doc/classes/LongDecimal.src/M000058.html +1 -1
- data/doc/classes/LongDecimal.src/M000059.html +1 -1
- data/doc/classes/LongDecimal.src/M000060.html +1 -1
- data/doc/classes/LongDecimal.src/M000062.html +1 -1
- data/doc/classes/LongDecimal.src/M000063.html +1 -1
- data/doc/classes/LongDecimal.src/M000064.html +1 -1
- data/doc/classes/LongDecimal.src/M000065.html +1 -1
- data/doc/classes/LongDecimal.src/M000066.html +4 -8
- data/doc/classes/LongDecimal.src/M000067.html +6 -7
- data/doc/classes/LongDecimal.src/M000068.html +5 -5
- data/doc/classes/LongDecimal.src/M000069.html +6 -6
- data/doc/classes/LongDecimal.src/M000070.html +9 -4
- data/doc/classes/LongDecimal.src/M000071.html +4 -19
- data/doc/classes/LongDecimal.src/M000072.html +15 -5
- data/doc/classes/LongDecimal.src/M000073.html +7 -7
- data/doc/classes/LongDecimal.src/M000074.html +7 -18
- data/doc/classes/LongDecimal.src/M000075.html +20 -7
- data/doc/classes/LongDecimal.src/M000076.html +8 -5
- data/doc/classes/LongDecimal.src/M000077.html +5 -9
- data/doc/classes/LongDecimal.src/M000078.html +5 -5
- data/doc/classes/LongDecimal.src/M000079.html +5 -5
- data/doc/classes/LongDecimal.src/M000080.html +9 -4
- data/doc/classes/LongDecimal.src/M000081.html +4 -7
- data/doc/classes/LongDecimal.src/M000082.html +4 -4
- data/doc/classes/LongDecimal.src/M000083.html +7 -4
- data/doc/classes/LongDecimal.src/M000084.html +4 -4
- data/doc/classes/LongDecimal.src/M000085.html +4 -9
- data/doc/classes/LongDecimal.src/M000086.html +6 -6
- data/doc/classes/LongDecimal.src/M000087.html +9 -5
- data/doc/classes/LongDecimal.src/M000088.html +4 -8
- data/doc/classes/LongDecimal.src/M000089.html +9 -4
- data/doc/classes/LongDecimal.src/M000090.html +4 -4
- data/doc/classes/LongDecimal.src/M000091.html +4 -4
- data/doc/classes/LongDecimal.src/M000092.html +4 -4
- data/doc/classes/LongDecimal.src/M000093.html +4 -59
- data/doc/classes/LongDecimal.src/M000094.html +59 -4
- data/doc/classes/LongDecimal.src/M000095.html +4 -4
- data/doc/classes/LongDecimal.src/M000096.html +4 -5
- data/doc/classes/LongDecimal.src/M000099.html +5 -5
- data/doc/classes/LongDecimal.src/M000100.html +5 -4
- data/doc/classes/LongDecimal.src/M000101.html +4 -4
- data/doc/classes/LongDecimal.src/M000102.html +4 -4
- data/doc/classes/LongDecimal.src/M000103.html +4 -4
- data/doc/classes/LongDecimalBase.html +53 -53
- data/doc/classes/LongDecimalBase.src/M000108.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000109.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000110.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000111.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000112.html +4 -9
- data/doc/classes/LongDecimalBase.src/M000113.html +9 -9
- data/doc/classes/LongDecimalBase.src/M000116.html +9 -5
- data/doc/classes/LongDecimalBase.src/M000117.html +5 -4
- data/doc/classes/LongDecimalQuot.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000012.html +2 -2
- data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000030.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000031.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000034.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000035.html +1 -1
- data/doc/classes/LongDecimalRoundingMode.html +6 -1
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +37 -16
- data/doc/classes/LongMath.html +246 -161
- data/doc/classes/LongMath.src/M000119.html +5 -4
- data/doc/classes/LongMath.src/M000120.html +4 -4
- data/doc/classes/LongMath.src/M000121.html +4 -5
- data/doc/classes/LongMath.src/M000122.html +5 -4
- data/doc/classes/LongMath.src/M000123.html +4 -18
- data/doc/classes/LongMath.src/M000124.html +14 -14
- data/doc/classes/LongMath.src/M000125.html +18 -5
- data/doc/classes/LongMath.src/M000126.html +5 -29
- data/doc/classes/LongMath.src/M000127.html +29 -5
- data/doc/classes/LongMath.src/M000128.html +5 -57
- data/doc/classes/LongMath.src/M000129.html +55 -19
- data/doc/classes/LongMath.src/M000130.html +20 -35
- data/doc/classes/LongMath.src/M000131.html +36 -6
- data/doc/classes/LongMath.src/M000132.html +6 -33
- data/doc/classes/LongMath.src/M000133.html +26 -44
- data/doc/classes/LongMath.src/M000134.html +49 -5
- data/doc/classes/LongMath.src/M000135.html +7 -4
- data/doc/classes/LongMath.src/M000136.html +4 -4
- data/doc/classes/LongMath.src/M000137.html +4 -72
- data/doc/classes/LongMath.src/M000138.html +67 -39
- data/doc/classes/LongMath.src/M000139.html +44 -4
- data/doc/classes/LongMath.src/M000140.html +4 -4
- data/doc/classes/LongMath.src/M000141.html +4 -6
- data/doc/classes/LongMath.src/M000142.html +4 -18
- data/doc/classes/LongMath.src/M000143.html +8 -7
- data/doc/classes/LongMath.src/M000144.html +10 -35
- data/doc/classes/LongMath.src/M000145.html +23 -202
- data/doc/classes/LongMath.src/M000146.html +322 -4
- data/doc/classes/LongMath.src/M000147.html +22 -63
- data/doc/classes/LongMath.src/M000148.html +65 -33
- data/doc/classes/LongMath/CacheKey.html +5 -5
- data/doc/classes/Numeric.html +11 -11
- data/doc/classes/Numeric.src/M000105.html +9 -4
- data/doc/classes/Rational.html +6 -6
- data/doc/created.rid +1 -1
- data/doc/files/lib/long-decimal_rb.html +2 -2
- data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
- data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
- data/doc/fr_method_index.html +102 -95
- data/lib/long-decimal.rb +206 -49
- data/test/testlongdecimal.rb +736 -21
- data/test/testlongdeclib.rb +136 -25
- data/test/testrandlib.rb +87 -0
- data/test/testrandom.rb +30 -45
- data/test/testrandpower.rb +72 -0
- metadata +4 -2
@@ -103,7 +103,7 @@ internal rounding mode (mode)
|
|
103
103
|
<h3 class="section-bar">Methods</h3>
|
104
104
|
|
105
105
|
<div class="name-list">
|
106
|
-
<a href="#
|
106
|
+
<a href="#M000155"><=></a>
|
107
107
|
</div>
|
108
108
|
</div>
|
109
109
|
|
@@ -132,12 +132,12 @@ internal rounding mode (mode)
|
|
132
132
|
<div id="methods">
|
133
133
|
<h3 class="section-bar">Public Instance methods</h3>
|
134
134
|
|
135
|
-
<div id="method-
|
136
|
-
<a name="
|
135
|
+
<div id="method-M000155" class="method-detail">
|
136
|
+
<a name="M000155"></a>
|
137
137
|
|
138
138
|
<div class="method-heading">
|
139
|
-
<a href="CacheKey.src/
|
140
|
-
onclick="popupCode('CacheKey.src/
|
139
|
+
<a href="CacheKey.src/M000155.html" target="Code" class="method-signature"
|
140
|
+
onclick="popupCode('CacheKey.src/M000155.html');return false;">
|
141
141
|
<span class="method-name"><=></span><span class="method-args">(o)</span>
|
142
142
|
</a>
|
143
143
|
</div>
|
data/doc/classes/Numeric.html
CHANGED
@@ -101,8 +101,8 @@
|
|
101
101
|
<h3 class="section-bar">Methods</h3>
|
102
102
|
|
103
103
|
<div class="name-list">
|
104
|
-
<a href="#
|
105
|
-
<a href="#
|
104
|
+
<a href="#M000106">one?</a>
|
105
|
+
<a href="#M000105">to_ld</a>
|
106
106
|
</div>
|
107
107
|
</div>
|
108
108
|
|
@@ -124,12 +124,12 @@
|
|
124
124
|
<div id="methods">
|
125
125
|
<h3 class="section-bar">Public Instance methods</h3>
|
126
126
|
|
127
|
-
<div id="method-
|
128
|
-
<a name="
|
127
|
+
<div id="method-M000106" class="method-detail">
|
128
|
+
<a name="M000106"></a>
|
129
129
|
|
130
130
|
<div class="method-heading">
|
131
|
-
<a href="Numeric.src/
|
132
|
-
onclick="popupCode('Numeric.src/
|
131
|
+
<a href="Numeric.src/M000106.html" target="Code" class="method-signature"
|
132
|
+
onclick="popupCode('Numeric.src/M000106.html');return false;">
|
133
133
|
<span class="method-name">one?</span><span class="method-args">()</span>
|
134
134
|
</a>
|
135
135
|
</div>
|
@@ -141,13 +141,13 @@ test if 1 (like zero?)
|
|
141
141
|
</div>
|
142
142
|
</div>
|
143
143
|
|
144
|
-
<div id="method-
|
145
|
-
<a name="
|
144
|
+
<div id="method-M000105" class="method-detail">
|
145
|
+
<a name="M000105"></a>
|
146
146
|
|
147
147
|
<div class="method-heading">
|
148
|
-
<a href="Numeric.src/
|
149
|
-
onclick="popupCode('Numeric.src/
|
150
|
-
<span class="method-name">to_ld</span><span class="method-args">(prec = nil, mode =
|
148
|
+
<a href="Numeric.src/M000105.html" target="Code" class="method-signature"
|
149
|
+
onclick="popupCode('Numeric.src/M000105.html');return false;">
|
150
|
+
<span class="method-name">to_ld</span><span class="method-args">(prec = nil, mode = LongMath.standard_mode)</span>
|
151
151
|
</a>
|
152
152
|
</div>
|
153
153
|
|
@@ -5,14 +5,19 @@
|
|
5
5
|
|
6
6
|
<html>
|
7
7
|
<head>
|
8
|
-
<title>
|
8
|
+
<title>to_ld (Numeric)</title>
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
15
|
-
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1829</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">standard_mode</span>)
|
15
|
+
<span class="ruby-identifier">l</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-keyword kw">self</span>)
|
16
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">prec</span>.<span class="ruby-identifier">nil?</span>)
|
17
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">l</span>
|
18
|
+
<span class="ruby-keyword kw">else</span>
|
19
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
|
20
|
+
<span class="ruby-keyword kw">end</span>
|
16
21
|
<span class="ruby-keyword kw">end</span></pre>
|
17
22
|
</body>
|
18
23
|
</html>
|
data/doc/classes/Rational.html
CHANGED
@@ -101,7 +101,7 @@
|
|
101
101
|
<h3 class="section-bar">Methods</h3>
|
102
102
|
|
103
103
|
<div class="name-list">
|
104
|
-
<a href="#
|
104
|
+
<a href="#M000107">to_ld</a>
|
105
105
|
</div>
|
106
106
|
</div>
|
107
107
|
|
@@ -123,13 +123,13 @@
|
|
123
123
|
<div id="methods">
|
124
124
|
<h3 class="section-bar">Public Instance methods</h3>
|
125
125
|
|
126
|
-
<div id="method-
|
127
|
-
<a name="
|
126
|
+
<div id="method-M000107" class="method-detail">
|
127
|
+
<a name="M000107"></a>
|
128
128
|
|
129
129
|
<div class="method-heading">
|
130
|
-
<a href="Rational.src/
|
131
|
-
onclick="popupCode('Rational.src/
|
132
|
-
<span class="method-name">to_ld</span><span class="method-args">(prec = nil, mode =
|
130
|
+
<a href="Rational.src/M000107.html" target="Code" class="method-signature"
|
131
|
+
onclick="popupCode('Rational.src/M000107.html');return false;">
|
132
|
+
<span class="method-name">to_ld</span><span class="method-args">(prec = nil, mode = LongMath.standard_mode)</span>
|
133
133
|
</a>
|
134
134
|
</div>
|
135
135
|
|
data/doc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Mon May 01 14:50:14 CEST 2006
|
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Mon May 01 14:50:04 CEST 2006</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -90,7 +90,7 @@ point
|
|
90
90
|
</p>
|
91
91
|
<p>
|
92
92
|
CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/lib/long-decimal.rb,v
|
93
|
-
1.
|
93
|
+
1.43 2006/05/01 12:22:12 bk1 Exp $ CVS-Label: $Name: ALPHA_01_01 $ Author:
|
94
94
|
$Author: bk1 $ (Karl Brodowsky)
|
95
95
|
</p>
|
96
96
|
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1804</span>
|
14
14
|
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongDecimal</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span> = <span class="ruby-value">0</span>)
|
15
15
|
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&&</span> (<span class="ruby-identifier">a</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>) <span class="ruby-keyword kw">then</span>
|
16
16
|
<span class="ruby-identifier">a</span>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1817</span>
|
14
14
|
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongDecimalQuot</span>(<span class="ruby-identifier">first</span>, <span class="ruby-identifier">second</span>)
|
15
15
|
<span class="ruby-constant">LongDecimalQuot</span>.<span class="ruby-identifier">new!</span>(<span class="ruby-identifier">first</span>, <span class="ruby-identifier">second</span>)
|
16
16
|
<span class="ruby-keyword kw">end</span></pre>
|
data/doc/fr_method_index.html
CHANGED
@@ -20,158 +20,165 @@
|
|
20
20
|
<div id="index">
|
21
21
|
<h1 class="section-bar">Methods</h1>
|
22
22
|
<div id="index-entries">
|
23
|
-
<a href="classes/LongDecimal.html#M000076">% (LongDecimal)</a><br />
|
24
23
|
<a href="classes/LongDecimalQuot.html#M000023">% (LongDecimalQuot)</a><br />
|
25
|
-
<a href="classes/LongDecimal.html#M000077"
|
26
|
-
<a href="classes/LongDecimal.html#
|
24
|
+
<a href="classes/LongDecimal.html#M000077">% (LongDecimal)</a><br />
|
25
|
+
<a href="classes/LongDecimal.html#M000078">& (LongDecimal)</a><br />
|
26
|
+
<a href="classes/LongDecimal.html#M000070">* (LongDecimal)</a><br />
|
27
27
|
<a href="classes/LongDecimalQuot.html#M000019">* (LongDecimalQuot)</a><br />
|
28
|
+
<a href="classes/LongDecimal.html#M000075">** (LongDecimal)</a><br />
|
28
29
|
<a href="classes/LongDecimalQuot.html#M000021">** (LongDecimalQuot)</a><br />
|
29
|
-
<a href="classes/LongDecimal.html#
|
30
|
+
<a href="classes/LongDecimal.html#M000068">+ (LongDecimal)</a><br />
|
30
31
|
<a href="classes/LongDecimalQuot.html#M000017">+ (LongDecimalQuot)</a><br />
|
31
|
-
<a href="classes/
|
32
|
-
<a href="classes/
|
33
|
-
<a href="classes/LongDecimal.html#M000068">- (LongDecimal)</a><br />
|
32
|
+
<a href="classes/LongDecimalBase.html#M000111">+@ (LongDecimalBase)</a><br />
|
33
|
+
<a href="classes/LongDecimal.html#M000069">- (LongDecimal)</a><br />
|
34
34
|
<a href="classes/LongDecimalQuot.html#M000018">- (LongDecimalQuot)</a><br />
|
35
|
-
<a href="classes/LongDecimal.html#M000066">-@ (LongDecimal)</a><br />
|
36
35
|
<a href="classes/LongDecimalQuot.html#M000016">-@ (LongDecimalQuot)</a><br />
|
37
|
-
<a href="classes/LongDecimal.html#
|
36
|
+
<a href="classes/LongDecimal.html#M000067">-@ (LongDecimal)</a><br />
|
37
|
+
<a href="classes/LongDecimal.html#M000074">/ (LongDecimal)</a><br />
|
38
38
|
<a href="classes/LongDecimalQuot.html#M000020">/ (LongDecimalQuot)</a><br />
|
39
|
-
<a href="classes/LongDecimal.html#
|
40
|
-
<a href="classes/LongDecimalBase.html#
|
41
|
-
<a href="classes/
|
42
|
-
<a href="classes/
|
43
|
-
<a href="classes/LongDecimal.html#
|
39
|
+
<a href="classes/LongDecimal.html#M000082"><< (LongDecimal)</a><br />
|
40
|
+
<a href="classes/LongDecimalBase.html#M000116"><=> (LongDecimalBase)</a><br />
|
41
|
+
<a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000156"><=> (LongDecimalRoundingMode::RoundingModeClass)</a><br />
|
42
|
+
<a href="classes/LongMath/CacheKey.html#M000155"><=> (LongMath::CacheKey)</a><br />
|
43
|
+
<a href="classes/LongDecimal.html#M000099">== (LongDecimal)</a><br />
|
44
44
|
<a href="classes/LongDecimalQuot.html#M000027">== (LongDecimalQuot)</a><br />
|
45
|
-
<a href="classes/LongDecimal.html#
|
46
|
-
<a href="classes/LongDecimal.html#
|
45
|
+
<a href="classes/LongDecimal.html#M000100">=== (LongDecimal)</a><br />
|
46
|
+
<a href="classes/LongDecimal.html#M000083">>> (LongDecimal)</a><br />
|
47
47
|
<a href="files/lib/long-decimal_rb.html#M000001">LongDecimal (lib/long-decimal.rb)</a><br />
|
48
48
|
<a href="files/lib/long-decimal_rb.html#M000002">LongDecimalQuot (lib/long-decimal.rb)</a><br />
|
49
|
-
<a href="classes/LongDecimal.html#
|
50
|
-
<a href="classes/LongDecimal.html#
|
51
|
-
<a href="classes/LongDecimal.html#M000092">abs (LongDecimal)</a><br />
|
49
|
+
<a href="classes/LongDecimal.html#M000084">[] (LongDecimal)</a><br />
|
50
|
+
<a href="classes/LongDecimal.html#M000080">^ (LongDecimal)</a><br />
|
52
51
|
<a href="classes/LongDecimalQuot.html#M000024">abs (LongDecimalQuot)</a><br />
|
53
|
-
<a href="classes/
|
52
|
+
<a href="classes/LongDecimal.html#M000093">abs (LongDecimal)</a><br />
|
53
|
+
<a href="classes/LongDecimalBase.html#M000115">abs2 (LongDecimalBase)</a><br />
|
54
|
+
<a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000158">ainverse (LongDecimalRoundingMode::RoundingModeClass)</a><br />
|
54
55
|
<a href="classes/LongDecimal.html#M000059">anti_equalize_scale (LongDecimal)</a><br />
|
55
|
-
<a href="classes/LongMath.html#
|
56
|
-
<a href="classes/LongMath.html#
|
57
|
-
<a href="classes/LongMath.html#
|
58
|
-
<a href="classes/LongMath.html#
|
59
|
-
<a href="classes/LongMath.html#
|
60
|
-
<a href="classes/LongMath.html#
|
56
|
+
<a href="classes/LongMath.html#M000147">calc_iprec_for_power (LongMath)</a><br />
|
57
|
+
<a href="classes/LongMath.html#M000120">check_is_int (LongMath)</a><br />
|
58
|
+
<a href="classes/LongMath.html#M000121">check_is_ld (LongMath)</a><br />
|
59
|
+
<a href="classes/LongMath.html#M000123">check_is_mode (LongMath)</a><br />
|
60
|
+
<a href="classes/LongMath.html#M000122">check_is_prec (LongMath)</a><br />
|
61
|
+
<a href="classes/LongMath.html#M000119">check_word_len (LongMath)</a><br />
|
61
62
|
<a href="classes/LongDecimalQuot.html#M000026">coerce (LongDecimalQuot)</a><br />
|
62
|
-
<a href="classes/LongDecimal.html#
|
63
|
-
<a href="classes/LongDecimalBase.html#
|
64
|
-
<a href="classes/LongDecimal.html#M000064">dec! (LongDecimal)</a><br />
|
63
|
+
<a href="classes/LongDecimal.html#M000094">coerce (LongDecimal)</a><br />
|
64
|
+
<a href="classes/LongDecimalBase.html#M000110">dec (LongDecimalBase)</a><br />
|
65
65
|
<a href="classes/LongDecimalQuot.html#M000015">dec! (LongDecimalQuot)</a><br />
|
66
|
+
<a href="classes/LongDecimal.html#M000064">dec! (LongDecimal)</a><br />
|
66
67
|
<a href="classes/LongDecimalQuot.html#M000006">denominator (LongDecimalQuot)</a><br />
|
67
68
|
<a href="classes/LongDecimal.html#M000054">denominator (LongDecimal)</a><br />
|
68
|
-
<a href="classes/LongDecimal.html#
|
69
|
-
<a href="classes/LongDecimal.html#
|
69
|
+
<a href="classes/LongDecimal.html#M000071">divide (LongDecimal)</a><br />
|
70
|
+
<a href="classes/LongDecimal.html#M000072">divide_s (LongDecimal)</a><br />
|
71
|
+
<a href="classes/LongDecimal.html#M000076">divmod (LongDecimal)</a><br />
|
70
72
|
<a href="classes/LongDecimalQuot.html#M000022">divmod (LongDecimalQuot)</a><br />
|
71
|
-
<a href="classes/LongDecimal.html#M000075">divmod (LongDecimal)</a><br />
|
72
73
|
<a href="classes/LongDecimal.html#M000058">equalize_scale (LongDecimal)</a><br />
|
73
|
-
<a href="classes/LongMath.html#
|
74
|
-
<a href="classes/LongMath.html#
|
75
|
-
<a href="classes/LongMath.html#
|
76
|
-
<a href="classes/LongMath.html#
|
77
|
-
<a href="classes/LongMath.html#
|
78
|
-
<a href="classes/LongMath.html#
|
74
|
+
<a href="classes/LongMath.html#M000135">exp (LongMath)</a><br />
|
75
|
+
<a href="classes/LongMath.html#M000137">exp10 (LongMath)</a><br />
|
76
|
+
<a href="classes/LongMath.html#M000136">exp2 (LongMath)</a><br />
|
77
|
+
<a href="classes/LongMath.html#M000138">exp_internal (LongMath)</a><br />
|
78
|
+
<a href="classes/LongMath.html#M000139">exp_raw (LongMath)</a><br />
|
79
|
+
<a href="classes/LongMath.html#M000130">gcd_with_high_power (LongMath)</a><br />
|
80
|
+
<a href="classes/LongDecimal.html#M000103">hash (LongDecimal)</a><br />
|
79
81
|
<a href="classes/LongDecimalQuot.html#M000034">hash (LongDecimalQuot)</a><br />
|
80
|
-
<a href="classes/
|
81
|
-
<a href="classes/
|
82
|
-
<a href="classes/LongDecimalBase.html#M000108">inc (LongDecimalBase)</a><br />
|
83
|
-
<a href="classes/LongDecimalQuot.html#M000014">inc! (LongDecimalQuot)</a><br />
|
82
|
+
<a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000159">hash (LongDecimalRoundingMode::RoundingModeClass)</a><br />
|
83
|
+
<a href="classes/LongDecimalBase.html#M000109">inc (LongDecimalBase)</a><br />
|
84
84
|
<a href="classes/LongDecimal.html#M000063">inc! (LongDecimal)</a><br />
|
85
|
-
<a href="classes/
|
85
|
+
<a href="classes/LongDecimalQuot.html#M000014">inc! (LongDecimalQuot)</a><br />
|
86
86
|
<a href="classes/LongDecimalQuot.html#M000035">inspect (LongDecimalQuot)</a><br />
|
87
|
-
<a href="classes/
|
87
|
+
<a href="classes/LongDecimal.html#M000104">inspect (LongDecimal)</a><br />
|
88
|
+
<a href="classes/LongMath.html#M000133">int_digits10 (LongMath)</a><br />
|
88
89
|
<a href="classes/LongDecimal.html#M000057">int_digits10 (LongDecimal)</a><br />
|
89
90
|
<a href="classes/LongDecimal.html#M000055">int_digits2 (LongDecimal)</a><br />
|
90
|
-
<a href="classes/
|
91
|
-
<a href="classes/
|
91
|
+
<a href="classes/LongDecimalBase.html#M000114">inverse (LongDecimalBase)</a><br />
|
92
|
+
<a href="classes/LongMath.html#M000149">ipower (LongMath)</a><br />
|
93
|
+
<a href="classes/LongDecimal.html#M000095">is_int? (LongDecimal)</a><br />
|
92
94
|
<a href="classes/LongDecimalQuot.html#M000030">is_int? (LongDecimalQuot)</a><br />
|
93
|
-
<a href="classes/
|
94
|
-
<a href="classes/LongMath.html#
|
95
|
-
<a href="classes/LongMath.html#
|
96
|
-
<a href="classes/LongMath.html#
|
97
|
-
<a href="classes/LongMath.html#
|
98
|
-
<a href="classes/LongMath.html#
|
99
|
-
<a href="classes/LongMath.html#M000124">merge_from_words (LongMath)</a><br />
|
95
|
+
<a href="classes/LongMath.html#M000142">log (LongMath)</a><br />
|
96
|
+
<a href="classes/LongMath.html#M000143">log10 (LongMath)</a><br />
|
97
|
+
<a href="classes/LongMath.html#M000144">log2 (LongMath)</a><br />
|
98
|
+
<a href="classes/LongMath.html#M000145">log_internal (LongMath)</a><br />
|
99
|
+
<a href="classes/LongMath.html#M000146">log_raw (LongMath)</a><br />
|
100
|
+
<a href="classes/LongMath.html#M000125">merge_from_words (LongMath)</a><br />
|
100
101
|
<a href="classes/LongDecimal.html#M000041">minus_one! (LongDecimal)</a><br />
|
101
|
-
<a href="classes/
|
102
|
-
<a href="classes/LongDecimal.html#
|
103
|
-
<a href="classes/LongDecimal.html#
|
104
|
-
<a href="classes/LongDecimal.html#
|
105
|
-
<a href="classes/
|
106
|
-
<a href="classes/LongMath.html#
|
102
|
+
<a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000157">minverse (LongDecimalRoundingMode::RoundingModeClass)</a><br />
|
103
|
+
<a href="classes/LongDecimal.html#M000086">move_point_left (LongDecimal)</a><br />
|
104
|
+
<a href="classes/LongDecimal.html#M000088">move_point_left_int (LongDecimal)</a><br />
|
105
|
+
<a href="classes/LongDecimal.html#M000087">move_point_right (LongDecimal)</a><br />
|
106
|
+
<a href="classes/LongDecimal.html#M000089">move_point_right_int (LongDecimal)</a><br />
|
107
|
+
<a href="classes/LongMath.html#M000132">multiplicity_of_10 (LongMath)</a><br />
|
108
|
+
<a href="classes/LongMath.html#M000131">multiplicity_of_factor (LongMath)</a><br />
|
107
109
|
<a href="classes/LongDecimal.html#M000043">new (LongDecimal)</a><br />
|
108
110
|
<a href="classes/LongDecimalQuot.html#M000004">new (LongDecimalQuot)</a><br />
|
109
|
-
<a href="classes/LongDecimal.html#M000036">new! (LongDecimal)</a><br />
|
110
111
|
<a href="classes/LongDecimalQuot.html#M000003">new! (LongDecimalQuot)</a><br />
|
112
|
+
<a href="classes/LongDecimal.html#M000036">new! (LongDecimal)</a><br />
|
111
113
|
<a href="classes/LongDecimal.html#M000061">next (LongDecimal)</a><br />
|
112
114
|
<a href="classes/LongDecimalQuot.html#M000005">numerator (LongDecimalQuot)</a><br />
|
113
115
|
<a href="classes/LongDecimal.html#M000038">one! (LongDecimal)</a><br />
|
114
|
-
<a href="classes/
|
116
|
+
<a href="classes/LongDecimal.html#M000102">one? (LongDecimal)</a><br />
|
117
|
+
<a href="classes/Numeric.html#M000106">one? (Numeric)</a><br />
|
115
118
|
<a href="classes/LongDecimalQuot.html#M000029">one? (LongDecimalQuot)</a><br />
|
116
|
-
<a href="classes/
|
117
|
-
<a href="classes/LongMath.html#
|
118
|
-
<a href="classes/LongMath.html#
|
119
|
-
<a href="classes/LongMath.html#M000148">power_internal (LongMath)</a><br />
|
119
|
+
<a href="classes/LongMath.html#M000134">pi (LongMath)</a><br />
|
120
|
+
<a href="classes/LongMath.html#M000148">power (LongMath)</a><br />
|
121
|
+
<a href="classes/LongMath.html#M000150">power_internal (LongMath)</a><br />
|
120
122
|
<a href="classes/LongDecimal.html#M000042">power_of_ten! (LongDecimal)</a><br />
|
121
123
|
<a href="classes/LongDecimal.html#M000062">pred (LongDecimal)</a><br />
|
122
|
-
<a href="classes/LongDecimal.html#
|
123
|
-
<a href="classes/LongDecimalBase.html#
|
124
|
+
<a href="classes/LongDecimal.html#M000073">rdiv (LongDecimal)</a><br />
|
125
|
+
<a href="classes/LongDecimalBase.html#M000113">reciprocal (LongDecimalBase)</a><br />
|
124
126
|
<a href="classes/LongDecimal.html#M000046">round_to_scale (LongDecimal)</a><br />
|
125
127
|
<a href="classes/LongDecimalQuot.html#M000025">round_to_scale (LongDecimalQuot)</a><br />
|
126
128
|
<a href="classes/LongDecimal.html#M000045">round_trailing_zeros (LongDecimal)</a><br />
|
127
|
-
<a href="classes/LongDecimal.html#M000044">scale= (LongDecimal)</a><br />
|
128
129
|
<a href="classes/LongDecimalQuot.html#M000007">scale= (LongDecimalQuot)</a><br />
|
129
|
-
<a href="classes/
|
130
|
-
<a href="classes/LongDecimalBase.html#
|
131
|
-
<a href="classes/
|
130
|
+
<a href="classes/LongDecimal.html#M000044">scale= (LongDecimal)</a><br />
|
131
|
+
<a href="classes/LongDecimalBase.html#M000118">scale_equal (LongDecimalBase)</a><br />
|
132
|
+
<a href="classes/LongDecimalBase.html#M000117">scale_ufo (LongDecimalBase)</a><br />
|
133
|
+
<a href="classes/LongDecimal.html#M000096">sgn (LongDecimal)</a><br />
|
132
134
|
<a href="classes/LongDecimalQuot.html#M000031">sgn (LongDecimalQuot)</a><br />
|
133
|
-
<a href="classes/LongDecimal.html#
|
135
|
+
<a href="classes/LongDecimal.html#M000098">sign (LongDecimal)</a><br />
|
134
136
|
<a href="classes/LongDecimalQuot.html#M000033">sign (LongDecimalQuot)</a><br />
|
135
|
-
<a href="classes/LongDecimal.html#M000096">signum (LongDecimal)</a><br />
|
136
137
|
<a href="classes/LongDecimalQuot.html#M000032">signum (LongDecimalQuot)</a><br />
|
137
|
-
<a href="classes/
|
138
|
+
<a href="classes/LongDecimal.html#M000097">signum (LongDecimal)</a><br />
|
138
139
|
<a href="classes/LongDecimal.html#M000056">sint_digits10 (LongDecimal)</a><br />
|
139
|
-
<a href="classes/
|
140
|
-
<a href="classes/
|
141
|
-
<a href="classes/
|
142
|
-
<a href="classes/
|
143
|
-
<a href="classes/
|
144
|
-
<a href="classes/
|
145
|
-
<a href="classes/LongMath.html#
|
146
|
-
<a href="classes/LongMath.html#M000126">
|
147
|
-
<a href="classes/LongMath.html#M000127">
|
148
|
-
<a href="classes/LongMath.html#M000128">
|
149
|
-
<a href="classes/
|
150
|
-
<a href="classes/LongDecimal.html#
|
140
|
+
<a href="classes/LongDecimalQuot.html#M000013">sint_digits10 (LongDecimalQuot)</a><br />
|
141
|
+
<a href="classes/LongDecimal.html#M000085">size (LongDecimal)</a><br />
|
142
|
+
<a href="classes/LongMath.html#M000124">split_to_words (LongMath)</a><br />
|
143
|
+
<a href="classes/LongDecimal.html#M000091">sqrt (LongDecimal)</a><br />
|
144
|
+
<a href="classes/LongMath.html#M000140">sqrt (LongMath)</a><br />
|
145
|
+
<a href="classes/LongDecimal.html#M000092">sqrt_with_remainder (LongDecimal)</a><br />
|
146
|
+
<a href="classes/LongMath.html#M000141">sqrt_with_remainder (LongMath)</a><br />
|
147
|
+
<a href="classes/LongMath.html#M000126">sqrtb (LongMath)</a><br />
|
148
|
+
<a href="classes/LongMath.html#M000127">sqrtb_with_remainder (LongMath)</a><br />
|
149
|
+
<a href="classes/LongMath.html#M000128">sqrtw (LongMath)</a><br />
|
150
|
+
<a href="classes/LongMath.html#M000129">sqrtw_with_remainder (LongMath)</a><br />
|
151
|
+
<a href="classes/LongDecimal.html#M000090">square (LongDecimal)</a><br />
|
152
|
+
<a href="classes/LongDecimalBase.html#M000112">square (LongDecimalBase)</a><br />
|
153
|
+
<a href="classes/LongMath.html#M000153">standard_imode (LongMath)</a><br />
|
154
|
+
<a href="classes/LongMath.html#M000154">standard_imode= (LongMath)</a><br />
|
155
|
+
<a href="classes/LongMath.html#M000151">standard_mode (LongMath)</a><br />
|
156
|
+
<a href="classes/LongMath.html#M000152">standard_mode= (LongMath)</a><br />
|
151
157
|
<a href="classes/LongDecimal.html#M000060">succ (LongDecimal)</a><br />
|
158
|
+
<a href="classes/LongDecimal.html#M000066">sunit (LongDecimal)</a><br />
|
152
159
|
<a href="classes/LongDecimal.html#M000040">ten! (LongDecimal)</a><br />
|
153
160
|
<a href="classes/LongDecimalQuot.html#M000010">to_bd (LongDecimalQuot)</a><br />
|
154
161
|
<a href="classes/LongDecimal.html#M000053">to_bd (LongDecimal)</a><br />
|
155
|
-
<a href="classes/LongDecimal.html#M000050">to_f (LongDecimal)</a><br />
|
156
162
|
<a href="classes/LongDecimalQuot.html#M000009">to_f (LongDecimalQuot)</a><br />
|
157
|
-
<a href="classes/
|
163
|
+
<a href="classes/LongDecimal.html#M000050">to_f (LongDecimal)</a><br />
|
158
164
|
<a href="classes/LongDecimal.html#M000051">to_i (LongDecimal)</a><br />
|
159
|
-
<a href="classes/
|
160
|
-
<a href="classes/Numeric.html#M000104">to_ld (Numeric)</a><br />
|
165
|
+
<a href="classes/LongDecimalQuot.html#M000011">to_i (LongDecimalQuot)</a><br />
|
161
166
|
<a href="classes/LongDecimal.html#M000052">to_ld (LongDecimal)</a><br />
|
167
|
+
<a href="classes/Numeric.html#M000105">to_ld (Numeric)</a><br />
|
168
|
+
<a href="classes/Rational.html#M000107">to_ld (Rational)</a><br />
|
162
169
|
<a href="classes/LongDecimalQuot.html#M000012">to_ld (LongDecimalQuot)</a><br />
|
163
|
-
<a href="classes/LongDecimalBase.html#
|
164
|
-
<a href="classes/LongDecimal.html#M000047">to_s (LongDecimal)</a><br />
|
170
|
+
<a href="classes/LongDecimalBase.html#M000108">to_r (LongDecimalBase)</a><br />
|
165
171
|
<a href="classes/LongDecimalQuot.html#M000008">to_s (LongDecimalQuot)</a><br />
|
172
|
+
<a href="classes/LongDecimal.html#M000047">to_s (LongDecimal)</a><br />
|
166
173
|
<a href="classes/LongDecimal.html#M000048">to_s_10 (LongDecimal)</a><br />
|
167
174
|
<a href="classes/LongDecimal.html#M000049">to_s_internal (LongDecimal)</a><br />
|
168
175
|
<a href="classes/LongDecimal.html#M000039">two! (LongDecimal)</a><br />
|
169
176
|
<a href="classes/LongDecimal.html#M000065">unit (LongDecimal)</a><br />
|
170
177
|
<a href="classes/LongDecimal.html#M000037">zero! (LongDecimal)</a><br />
|
171
|
-
<a href="classes/LongDecimal.html#
|
178
|
+
<a href="classes/LongDecimal.html#M000101">zero? (LongDecimal)</a><br />
|
172
179
|
<a href="classes/LongDecimalQuot.html#M000028">zero? (LongDecimalQuot)</a><br />
|
173
|
-
<a href="classes/LongDecimal.html#
|
174
|
-
<a href="classes/LongDecimal.html#
|
180
|
+
<a href="classes/LongDecimal.html#M000079">| (LongDecimal)</a><br />
|
181
|
+
<a href="classes/LongDecimal.html#M000081">~ (LongDecimal)</a><br />
|
175
182
|
</div>
|
176
183
|
</div>
|
177
184
|
</body>
|
data/lib/long-decimal.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#
|
2
2
|
# long-decimal.rb -- Arbitrary precision decimals with fixed decimal point
|
3
3
|
#
|
4
|
-
# CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/lib/long-decimal.rb,v 1.
|
5
|
-
# CVS-Label: $Name:
|
4
|
+
# CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/lib/long-decimal.rb,v 1.43 2006/05/01 12:22:12 bk1 Exp $
|
5
|
+
# CVS-Label: $Name: ALPHA_01_01 $
|
6
6
|
# Author: $Author: bk1 $ (Karl Brodowsky)
|
7
7
|
#
|
8
8
|
require "complex"
|
@@ -37,8 +37,18 @@ module LongDecimalRoundingMode
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
|
40
|
+
#
|
41
|
+
# inverse mode in terms of multiplication
|
42
|
+
#
|
43
|
+
def minverse
|
44
|
+
LongDecimalRoundingMode::MUL_INVERSE_MODE[self]
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# inverse mode in terms of addition
|
49
|
+
#
|
50
|
+
def ainverse
|
51
|
+
LongDecimalRoundingMode::ADD_INVERSE_MODE[self]
|
42
52
|
end
|
43
53
|
|
44
54
|
def hash
|
@@ -61,7 +71,7 @@ module LongDecimalRoundingMode
|
|
61
71
|
ROUND_HALF_EVEN = RoundingModeClass.new(:ROUND_HALF_EVEN, 8)
|
62
72
|
ROUND_UNNECESSARY = RoundingModeClass.new(:ROUND_UNNECESSARY, 9)
|
63
73
|
|
64
|
-
|
74
|
+
MUL_INVERSE_MODE = {
|
65
75
|
ROUND_UP => ROUND_DOWN,
|
66
76
|
ROUND_DOWN => ROUND_UP,
|
67
77
|
ROUND_CEILING => ROUND_FLOOR,
|
@@ -74,13 +84,26 @@ module LongDecimalRoundingMode
|
|
74
84
|
ROUND_UNNECESSARY => ROUND_UNNECESSARY
|
75
85
|
}
|
76
86
|
|
87
|
+
ADD_INVERSE_MODE = {
|
88
|
+
ROUND_UP => ROUND_UP,
|
89
|
+
ROUND_DOWN => ROUND_DOWN,
|
90
|
+
ROUND_CEILING => ROUND_FLOOR,
|
91
|
+
ROUND_FLOOR => ROUND_CEILING,
|
92
|
+
ROUND_HALF_UP => ROUND_HALF_UP,
|
93
|
+
ROUND_HALF_DOWN => ROUND_HALF_DOWN,
|
94
|
+
ROUND_HALF_CEILING => ROUND_HALF_FLOOR,
|
95
|
+
ROUND_HALF_FLOOR => ROUND_HALF_CEILING,
|
96
|
+
ROUND_HALF_EVEN => ROUND_HALF_EVEN,
|
97
|
+
ROUND_UNNECESSARY => ROUND_UNNECESSARY
|
98
|
+
}
|
99
|
+
|
77
100
|
end # LongDecimalRoundingMode
|
78
101
|
|
79
102
|
#
|
80
103
|
# common base class for LongDecimal and LongDecimalQuot
|
81
104
|
#
|
82
105
|
class LongDecimalBase < Numeric
|
83
|
-
@RCS_ID='-$Id: long-decimal.rb,v 1.
|
106
|
+
@RCS_ID='-$Id: long-decimal.rb,v 1.43 2006/05/01 12:22:12 bk1 Exp $-'
|
84
107
|
|
85
108
|
include LongDecimalRoundingMode
|
86
109
|
|
@@ -188,7 +211,7 @@ end # class LongDecimalBase
|
|
188
211
|
# digits and the other one the position of the decimal point.
|
189
212
|
#
|
190
213
|
class LongDecimal < LongDecimalBase
|
191
|
-
@RCS_ID='-$Id: long-decimal.rb,v 1.
|
214
|
+
@RCS_ID='-$Id: long-decimal.rb,v 1.43 2006/05/01 12:22:12 bk1 Exp $-'
|
192
215
|
|
193
216
|
# MINUS_ONE = LongDecimal(-1)
|
194
217
|
# ZERO = LongDecimal(0)
|
@@ -525,12 +548,25 @@ class LongDecimal < LongDecimalBase
|
|
525
548
|
# representation otherwise.
|
526
549
|
#
|
527
550
|
def to_f
|
551
|
+
# handle overflow: raise exception
|
552
|
+
if (self.abs > LongMath::MAX_FLOATABLE) then
|
553
|
+
raise ArgumentError, "self=#{self.inspect} cannot be expressed as Float"
|
554
|
+
end
|
555
|
+
|
556
|
+
# handle underflow: return 0.0
|
557
|
+
if (self.abs < LongMath::MIN_FLOATABLE) then
|
558
|
+
return 0.0
|
559
|
+
end
|
560
|
+
|
528
561
|
divisor = denominator
|
529
562
|
if (divisor == 1) then
|
530
563
|
return numerator.to_f
|
531
564
|
elsif numerator.abs <= LongMath::MAX_FLOATABLE then
|
532
565
|
if (divisor.abs > LongMath::MAX_FLOATABLE) then
|
533
|
-
|
566
|
+
q = 10**(scale - Float::MAX_10_EXP)
|
567
|
+
f = (numerator / q).to_f
|
568
|
+
d = divisor / q
|
569
|
+
return f / d
|
534
570
|
else
|
535
571
|
f = numerator.to_f
|
536
572
|
return f / divisor
|
@@ -567,7 +603,7 @@ class LongDecimal < LongDecimalBase
|
|
567
603
|
# optional first argument gives the precision for the desired result
|
568
604
|
# optional second argument gives the rouding mode
|
569
605
|
#
|
570
|
-
def to_ld(prec = nil, mode =
|
606
|
+
def to_ld(prec = nil, mode = LongMath.standard_mode)
|
571
607
|
if (prec.nil?)
|
572
608
|
return self
|
573
609
|
else
|
@@ -747,6 +783,13 @@ class LongDecimal < LongDecimalBase
|
|
747
783
|
LongDecimal(1, scale)
|
748
784
|
end
|
749
785
|
|
786
|
+
#
|
787
|
+
# return the unit by which self is incremented by succ times sign
|
788
|
+
#
|
789
|
+
def sunit
|
790
|
+
LongDecimal(sign, scale)
|
791
|
+
end
|
792
|
+
|
750
793
|
#
|
751
794
|
# apply unary -
|
752
795
|
# (returns negated self)
|
@@ -894,6 +937,7 @@ class LongDecimal < LongDecimalBase
|
|
894
937
|
else
|
895
938
|
abs_other = -other
|
896
939
|
new_scale = abs_other * scale
|
940
|
+
# puts("other=#{other} abs_other=#{abs_other} int_val=#{int_val} new_scale=#{new_scale} scale=#{scale}")
|
897
941
|
LongDecimalQuot(Rational(10 ** new_scale, int_val ** abs_other), new_scale)
|
898
942
|
end
|
899
943
|
else
|
@@ -1225,7 +1269,7 @@ end # LongDecimal
|
|
1225
1269
|
#
|
1226
1270
|
class LongDecimalQuot < LongDecimalBase
|
1227
1271
|
|
1228
|
-
@RCS_ID='-$Id: long-decimal.rb,v 1.
|
1272
|
+
@RCS_ID='-$Id: long-decimal.rb,v 1.43 2006/05/01 12:22:12 bk1 Exp $-'
|
1229
1273
|
|
1230
1274
|
#
|
1231
1275
|
# constructor
|
@@ -1339,7 +1383,7 @@ class LongDecimalQuot < LongDecimalBase
|
|
1339
1383
|
# optional first argument gives the precision for the desired result
|
1340
1384
|
# optional second argument gives the rouding mode
|
1341
1385
|
#
|
1342
|
-
def to_ld(prec = scale, mode =
|
1386
|
+
def to_ld(prec = scale, mode = LongMath.standard_mode)
|
1343
1387
|
round_to_scale(prec, mode)
|
1344
1388
|
end
|
1345
1389
|
|
@@ -1782,7 +1826,7 @@ class Numeric
|
|
1782
1826
|
# optional first argument gives the precision for the desired result
|
1783
1827
|
# optional second argument gives the rouding mode
|
1784
1828
|
#
|
1785
|
-
def to_ld(prec = nil, mode =
|
1829
|
+
def to_ld(prec = nil, mode = LongMath.standard_mode)
|
1786
1830
|
l = LongDecimal(self)
|
1787
1831
|
if (prec.nil?)
|
1788
1832
|
return l
|
@@ -1809,7 +1853,7 @@ class Rational
|
|
1809
1853
|
# optional first argument gives the precision for the desired result
|
1810
1854
|
# optional second argument gives the rouding mode
|
1811
1855
|
#
|
1812
|
-
def to_ld(prec = nil, mode =
|
1856
|
+
def to_ld(prec = nil, mode = LongMath.standard_mode)
|
1813
1857
|
if (prec.nil?)
|
1814
1858
|
return LongDecimal(self)
|
1815
1859
|
else
|
@@ -1831,10 +1875,11 @@ module LongMath
|
|
1831
1875
|
|
1832
1876
|
include LongDecimalRoundingMode
|
1833
1877
|
|
1834
|
-
MAX_FLOATABLE
|
1835
|
-
MAX_EXP_ABLE
|
1836
|
-
|
1837
|
-
|
1878
|
+
MAX_FLOATABLE = Float::MAX.to_i
|
1879
|
+
MAX_EXP_ABLE = Math.log(MAX_FLOATABLE).to_i
|
1880
|
+
MIN_FLOATABLE = Float::MIN.to_ld(340, LongMath::ROUND_UP)
|
1881
|
+
LOG2 = Math.log(2.0)
|
1882
|
+
LOG10 = Math.log(10.0)
|
1838
1883
|
|
1839
1884
|
@@cache = {}
|
1840
1885
|
|
@@ -2281,11 +2326,11 @@ module LongMath
|
|
2281
2326
|
# cache_result should the result be cached? Set to false, if an
|
2282
2327
|
# extraordinary long result is really needed only once
|
2283
2328
|
#
|
2284
|
-
def LongMath.pi(prec, final_mode =
|
2329
|
+
def LongMath.pi(prec, final_mode = LongMath.standard_mode, iprec = nil, mode = nil, cache_result = true) # DOWN?
|
2285
2330
|
|
2286
2331
|
check_is_prec(prec, "prec")
|
2287
2332
|
if (mode.nil?)
|
2288
|
-
mode =
|
2333
|
+
mode = LongMath.standard_mode
|
2289
2334
|
end
|
2290
2335
|
check_is_mode(final_mode, "final_mode")
|
2291
2336
|
check_is_mode(mode, "mode")
|
@@ -2340,7 +2385,7 @@ module LongMath
|
|
2340
2385
|
# with the exponential function that exceed the memory. It may be
|
2341
2386
|
# removed in future versions.
|
2342
2387
|
#
|
2343
|
-
def LongMath.exp(x, prec, mode =
|
2388
|
+
def LongMath.exp(x, prec, mode = LongMath.standard_mode) # down?
|
2344
2389
|
raise TypeError, "x=#{x.inspect} must not be greater #{MAX_EXP_ABLE}" unless x <= MAX_EXP_ABLE
|
2345
2390
|
check_is_prec(prec, "prec")
|
2346
2391
|
check_is_mode(mode, "mode")
|
@@ -2354,7 +2399,7 @@ module LongMath
|
|
2354
2399
|
# arbitrary, but it is enforced in order to avoid producing numbers
|
2355
2400
|
# with the exponential function that exceed the memory.
|
2356
2401
|
#
|
2357
|
-
def LongMath.exp2(x, prec, mode =
|
2402
|
+
def LongMath.exp2(x, prec, mode = LongMath.standard_mode) # down?
|
2358
2403
|
LongMath.power(2, x, prec, mode)
|
2359
2404
|
end
|
2360
2405
|
|
@@ -2365,7 +2410,7 @@ module LongMath
|
|
2365
2410
|
# arbitrary, but it is enforced in order to avoid producing numbers
|
2366
2411
|
# with the exponential function that exceed the memory.
|
2367
2412
|
#
|
2368
|
-
def LongMath.exp10(x, prec, mode =
|
2413
|
+
def LongMath.exp10(x, prec, mode = LongMath.standard_mode) # down?
|
2369
2414
|
LongMath.power(10, x, prec, mode)
|
2370
2415
|
end
|
2371
2416
|
|
@@ -2405,7 +2450,7 @@ module LongMath
|
|
2405
2450
|
# create a bug report, if the default settings for the parameters do
|
2406
2451
|
# not work correctly
|
2407
2452
|
#
|
2408
|
-
def LongMath.exp_internal(x, prec = nil, final_mode =
|
2453
|
+
def LongMath.exp_internal(x, prec = nil, final_mode = LongMath.standard_mode, j = nil, k = nil, iprec = nil, mode = LongMath.standard_imode, cache_result = true) # down?
|
2409
2454
|
|
2410
2455
|
if (prec == nil) then
|
2411
2456
|
if (x.kind_of? LongDecimalBase)
|
@@ -2417,7 +2462,7 @@ module LongMath
|
|
2417
2462
|
check_is_prec(prec, "prec")
|
2418
2463
|
|
2419
2464
|
if (final_mode == nil)
|
2420
|
-
final_mode =
|
2465
|
+
final_mode = LongMath.standard_mode
|
2421
2466
|
end
|
2422
2467
|
check_is_mode(final_mode, "final_mode")
|
2423
2468
|
check_is_mode(mode, "mode")
|
@@ -2528,7 +2573,7 @@ module LongMath
|
|
2528
2573
|
#
|
2529
2574
|
# calculate approximation of sqrt of a LongDecimal.
|
2530
2575
|
#
|
2531
|
-
def LongMath.sqrt(x, prec, mode =
|
2576
|
+
def LongMath.sqrt(x, prec, mode = LongMath.standard_mode) # down
|
2532
2577
|
LongMath.sqrt_internal(x, prec, mode, false)
|
2533
2578
|
end
|
2534
2579
|
|
@@ -2596,7 +2641,7 @@ module LongMath
|
|
2596
2641
|
# calculate the natural logarithm function of x to the given precision as
|
2597
2642
|
# LongDecimal.
|
2598
2643
|
#
|
2599
|
-
def LongMath.log(x, prec, mode =
|
2644
|
+
def LongMath.log(x, prec, mode = LongMath.standard_mode) # down?
|
2600
2645
|
check_is_prec(prec, "prec")
|
2601
2646
|
check_is_mode(mode, "mode")
|
2602
2647
|
log_internal(x, prec, mode)
|
@@ -2606,11 +2651,11 @@ module LongMath
|
|
2606
2651
|
# calculate the base 10 logarithm of x to the given precision as
|
2607
2652
|
# LongDecimal.
|
2608
2653
|
#
|
2609
|
-
def LongMath.log10(x, prec, mode =
|
2654
|
+
def LongMath.log10(x, prec, mode = LongMath.standard_mode) # down?
|
2610
2655
|
|
2611
2656
|
check_is_prec(prec, "prec")
|
2612
2657
|
check_is_mode(mode, "mode")
|
2613
|
-
iprec = prec +
|
2658
|
+
iprec = prec + 6
|
2614
2659
|
unless (x.kind_of? LongDecimal)
|
2615
2660
|
x = x.to_ld(iprec, mode)
|
2616
2661
|
end
|
@@ -2630,7 +2675,7 @@ module LongMath
|
|
2630
2675
|
# calculate the base 2 logarithm of x to the given precision as
|
2631
2676
|
# LongDecimal.
|
2632
2677
|
#
|
2633
|
-
def LongMath.log2(x, prec, mode =
|
2678
|
+
def LongMath.log2(x, prec, mode = LongMath.standard_mode)
|
2634
2679
|
|
2635
2680
|
check_is_prec(prec, "prec")
|
2636
2681
|
check_is_mode(mode, "mode")
|
@@ -2656,7 +2701,7 @@ module LongMath
|
|
2656
2701
|
# create a bug report, if the default settings for the parameters do
|
2657
2702
|
# not work correctly
|
2658
2703
|
#
|
2659
|
-
def LongMath.log_internal(x, prec = nil, final_mode =
|
2704
|
+
def LongMath.log_internal(x, prec = nil, final_mode = LongMath.standard_mode, iprec = nil, mode = LongMath.standard_imode, cache_result = true)
|
2660
2705
|
|
2661
2706
|
raise TypeError, "x=#{x.inspect} must not be positive" unless x > 0
|
2662
2707
|
if (prec == nil) then
|
@@ -2669,7 +2714,7 @@ module LongMath
|
|
2669
2714
|
check_is_prec(prec, "prec")
|
2670
2715
|
|
2671
2716
|
if (final_mode == nil)
|
2672
|
-
final_mode =
|
2717
|
+
final_mode = LongMath.standard_mode
|
2673
2718
|
end
|
2674
2719
|
check_is_mode(final_mode, "final_mode")
|
2675
2720
|
check_is_mode(mode, "mode")
|
@@ -2707,8 +2752,7 @@ module LongMath
|
|
2707
2752
|
#
|
2708
2753
|
def LongMath.log_raw(x, prec, iprec, mode)
|
2709
2754
|
|
2710
|
-
#
|
2711
|
-
# puts("log_raw start")
|
2755
|
+
# puts("log_raw start x=#{x}")
|
2712
2756
|
|
2713
2757
|
# we have to rely on iprec being at least 10
|
2714
2758
|
raise TypeError, "iprec=#{iprec} out of range" unless (iprec.kind_of? Fixnum) && iprec >= 10
|
@@ -2722,11 +2766,13 @@ module LongMath
|
|
2722
2766
|
# sign of result
|
2723
2767
|
s = 1
|
2724
2768
|
# make sure x is >= 1
|
2769
|
+
mode1 = mode
|
2725
2770
|
if (x < 1) then
|
2726
|
-
|
2771
|
+
mode1 = mode1.minverse
|
2772
|
+
x = (1 / x).round_to_scale(iprec, mode1)
|
2727
2773
|
s = -1
|
2728
2774
|
end
|
2729
|
-
# puts("log_raw prepared t=#{Time.new-t0}")
|
2775
|
+
# puts("log_raw prepared t=#{Time.new-t0} x=#{x} s=#{s} mode=#{mode} mode1=#{mode1}")
|
2730
2776
|
|
2731
2777
|
# number that are beyond the usual range of Float need to be
|
2732
2778
|
# handled specially to reduce to something expressable as Float
|
@@ -2734,7 +2780,7 @@ module LongMath
|
|
2734
2780
|
exp_keys.each do |exp_key|
|
2735
2781
|
exp_val = exp(exp_key, iprec)
|
2736
2782
|
while (x > exp_val) do
|
2737
|
-
x = (x / exp_val).round_to_scale(iprec,
|
2783
|
+
x = (x / exp_val).round_to_scale(iprec, mode1)
|
2738
2784
|
if (s < 0) then
|
2739
2785
|
y -= exp_key
|
2740
2786
|
else
|
@@ -2742,6 +2788,7 @@ module LongMath
|
|
2742
2788
|
end
|
2743
2789
|
end
|
2744
2790
|
end
|
2791
|
+
# puts("log_raw divided t=#{Time.new-t0} x=#{x} y=#{y} s=#{s}")
|
2745
2792
|
|
2746
2793
|
factor = 1
|
2747
2794
|
sprec = (iprec * 1.5).round
|
@@ -2751,9 +2798,20 @@ module LongMath
|
|
2751
2798
|
# delta = LongDecimal(1, LongMath.sqrtw(iprec))
|
2752
2799
|
# delta = LongDecimal(1, LongMath.sqrtw(LongMath.sqrtw(iprec+1)+1))
|
2753
2800
|
while (x - 1).abs > delta do
|
2754
|
-
x = LongMath.sqrt(x, sprec,
|
2801
|
+
x = LongMath.sqrt(x, sprec, mode1)
|
2755
2802
|
factor *= 2
|
2756
2803
|
end
|
2804
|
+
# puts("log_raw rooted t=#{Time.new-t0} x=#{x} y=#{y} s=#{s} f=#{factor}")
|
2805
|
+
|
2806
|
+
ss = 1
|
2807
|
+
mode2 = mode1.ainverse
|
2808
|
+
if (x < 1)
|
2809
|
+
puts("x<1 inverting")
|
2810
|
+
mode2 = mode2.ainverse
|
2811
|
+
x = (1 / x).round_to_scale(iprec, mode2)
|
2812
|
+
ss = -1
|
2813
|
+
end
|
2814
|
+
# puts("log_raw 2nd prep t=#{Time.new-t0} x=#{x} y=#{y} s=#{s} ss=#{ss} f=#{factor}")
|
2757
2815
|
|
2758
2816
|
sum = 0
|
2759
2817
|
z = 1 - x
|
@@ -2761,14 +2819,17 @@ module LongMath
|
|
2761
2819
|
p = 1.to_ld
|
2762
2820
|
d = 1.to_ld
|
2763
2821
|
until p.abs.round_to_scale(dprec, LongDecimal::ROUND_DOWN).zero? do
|
2764
|
-
p = (p * z).round_to_scale(iprec,
|
2765
|
-
d = (p / i).round_to_scale(iprec,
|
2822
|
+
p = (p * z).round_to_scale(iprec, mode2)
|
2823
|
+
d = (p / i).round_to_scale(iprec, mode2)
|
2766
2824
|
i += 1
|
2767
2825
|
sum += d
|
2768
2826
|
|
2769
2827
|
end
|
2828
|
+
sum *= ss
|
2829
|
+
# puts("log_raw added t=#{Time.new-t0} x=#{x} y=#{y} sum=#{sum} s=#{s} ss=#{ss} f=#{factor}")
|
2770
2830
|
|
2771
|
-
y -= ((s * factor) * sum).round_to_scale(iprec, mode)
|
2831
|
+
y -= ((s * factor) * sum).round_to_scale(iprec, mode.ainverse)
|
2832
|
+
# puts("log_raw done t=#{Time.new-t0} x=#{x} y=#{y} sum=#{sum} s=#{s} ss=#{ss} f=#{factor}")
|
2772
2833
|
return y
|
2773
2834
|
end
|
2774
2835
|
|
@@ -2780,10 +2841,14 @@ module LongMath
|
|
2780
2841
|
def LongMath.calc_iprec_for_power(x, y, prec)
|
2781
2842
|
x_f = x.to_f
|
2782
2843
|
y_f = y.to_f
|
2844
|
+
# if (x_f - 1).abs < 0.1
|
2845
|
+
# # x_f += 1e-6
|
2846
|
+
# x_f = x.square.to_f + 1e-4
|
2847
|
+
# end
|
2783
2848
|
logx_f = Math.log(x_f.abs)
|
2784
2849
|
logy_f = Math.log(y_f.abs)
|
2785
2850
|
logx_y_f = logx_f * y_f
|
2786
|
-
iprec_x = calc_iprec_for_exp(logx_y_f, prec, logx_y_f < 0)
|
2851
|
+
iprec_x = calc_iprec_for_exp(logx_y_f.abs.ceil, prec, logx_y_f < 0)
|
2787
2852
|
# iprec_x = calc_iprec_for_exp(logx_y_f, prec, logx_y_f < 0) + 10
|
2788
2853
|
iprec_y = iprec_x
|
2789
2854
|
iprec = iprec_x + 2
|
@@ -2793,6 +2858,7 @@ module LongMath
|
|
2793
2858
|
if (logy_f < 0)
|
2794
2859
|
iprec_y -= (logy_f/LOG10).round
|
2795
2860
|
end
|
2861
|
+
# puts("\niprec: x=#{x} y=#{y} iprec=#{iprec} iprec_x=#{iprec_x} iprec_y=#{iprec_y}\n")
|
2796
2862
|
[ iprec, iprec_x, iprec_y ]
|
2797
2863
|
|
2798
2864
|
end
|
@@ -2804,12 +2870,13 @@ module LongMath
|
|
2804
2870
|
# LongDecimal. Only supports values of y such that exp(y) still
|
2805
2871
|
# fits into a float (y <= 709)
|
2806
2872
|
#
|
2807
|
-
def LongMath.power(x, y, prec, mode =
|
2873
|
+
def LongMath.power(x, y, prec, mode = LongMath.standard_mode)
|
2808
2874
|
|
2809
2875
|
raise TypeError, "x=#{x} must be numeric" unless x.kind_of? Numeric
|
2810
2876
|
raise TypeError, "y=#{y} must be numeric" unless y.kind_of? Numeric
|
2877
|
+
raise TypeError, "x=#{x.inspect} must not be greater #{MAX_FLOATABLE}" unless x.abs <= MAX_FLOATABLE
|
2878
|
+
raise TypeError, "y=#{y.inspect} must not be greater #{MAX_FLOATABLE}" unless y.abs <= MAX_FLOATABLE
|
2811
2879
|
# raise TypeError, "y=#{y.inspect} must not be greater #{MAX_EXP_ABLE}" unless y <= MAX_EXP_ABLE
|
2812
|
-
# raise TypeError, "x=#{x.inspect} must not be greater #{MAX_FLOATABLE}" unless x <= MAX_FLOATABLE
|
2813
2880
|
# raise TypeError, "x=#{x.inspect} must not negative" unless x >= 0 || (y.kind_of? Integer) || (y.kind_of? LongDecimalBase) && y.is_int?
|
2814
2881
|
raise TypeError, "x=#{x.inspect} must not negative" unless x >= 0
|
2815
2882
|
check_is_prec(prec, "prec")
|
@@ -2827,6 +2894,7 @@ module LongMath
|
|
2827
2894
|
end
|
2828
2895
|
|
2829
2896
|
iprec, iprec_x, iprec_y = calc_iprec_for_power(x, y, prec)
|
2897
|
+
# puts("x=#{x} y=#{y} iprec=#{iprec} iprec_x=#{iprec_x} iprec_y=#{iprec_y} prec=#{prec}")
|
2830
2898
|
|
2831
2899
|
unless (x.kind_of? LongDecimalBase) || (x.kind_of? Integer)
|
2832
2900
|
x = x.to_ld(iprec_x, mode)
|
@@ -2844,7 +2912,9 @@ module LongMath
|
|
2844
2912
|
# x = x.to_ld(prec)
|
2845
2913
|
x = x.to_ld(iprec_x)
|
2846
2914
|
end
|
2847
|
-
z = x**y
|
2915
|
+
# z = x ** y
|
2916
|
+
z = LongMath.ipower(x, y, 2*iprec, mode)
|
2917
|
+
# puts("x=#{x} y=#{y} z=#{z} y int")
|
2848
2918
|
return z.to_ld(prec, mode)
|
2849
2919
|
end
|
2850
2920
|
|
@@ -2855,21 +2925,86 @@ module LongMath
|
|
2855
2925
|
y = y.to_ld(iprec_y, mode)
|
2856
2926
|
end
|
2857
2927
|
|
2928
|
+
if x < 1 then
|
2929
|
+
# since we do not allow x < 0 and we have handled x = 0 already,
|
2930
|
+
# we can be sure that x is no integer, so it has been converted
|
2931
|
+
# if necessary to LongDecimalBase
|
2932
|
+
y = -y
|
2933
|
+
x = (1/x).round_to_scale(iprec_x*2, mode)
|
2934
|
+
iprec, iprec_x, iprec_y = calc_iprec_for_power(x, y, prec)
|
2935
|
+
end
|
2936
|
+
|
2858
2937
|
# exponent is split in two parts, an integer part and a
|
2859
2938
|
# LongDecimal with absolute value <= 0.5
|
2860
|
-
y0 = y.round_to_scale(0,
|
2861
|
-
z0 = x**y0
|
2939
|
+
y0 = y.round_to_scale(0, LongMath.standard_imode).to_i
|
2940
|
+
# z0 = x**y0
|
2941
|
+
z0 = LongMath.ipower(x, y0, 2*iprec, mode)
|
2862
2942
|
y1 = y - y0
|
2863
2943
|
prec_extra = 0
|
2864
2944
|
if (y0 > 0)
|
2865
2945
|
prec_extra = (y0*Math.log10(x.to_f).abs).ceil
|
2866
2946
|
end
|
2867
2947
|
# z1 = LongMath.power_internal(x, y1, prec+prec_extra , mode)
|
2868
|
-
z1 = LongMath.power_internal(x, y1, prec+prec_extra +
|
2948
|
+
z1 = LongMath.power_internal(x, y1, prec+prec_extra + 4, mode)
|
2869
2949
|
z = z0 * z1
|
2950
|
+
# puts("x=#{x} y=#{y} z=#{z} y not int")
|
2870
2951
|
return z.to_ld(prec, mode)
|
2871
2952
|
end
|
2872
2953
|
|
2954
|
+
#
|
2955
|
+
# internal functionality to calculate the y-th power of x assuming
|
2956
|
+
# that y is an integer
|
2957
|
+
# prec is a hint on how much internal precision is needed at most
|
2958
|
+
# final rounding is left to the caller
|
2959
|
+
#
|
2960
|
+
def LongMath.ipower(x, y, prec, mode)
|
2961
|
+
|
2962
|
+
raise TypeError, "x=#{x} must be numeric" unless x.kind_of? Numeric
|
2963
|
+
raise TypeError, "y=#{y} must be integer" unless y.kind_of? Integer
|
2964
|
+
raise TypeError, "x=#{x.inspect} must not be greater #{MAX_FLOATABLE}" unless x.abs <= MAX_FLOATABLE
|
2965
|
+
raise TypeError, "y=#{y.inspect} must not be greater #{MAX_FLOATABLE}" unless y.abs <= MAX_FLOATABLE
|
2966
|
+
check_is_prec(prec, "prec")
|
2967
|
+
check_is_mode(mode, "mode")
|
2968
|
+
|
2969
|
+
if (y.zero?)
|
2970
|
+
return 1
|
2971
|
+
elsif ! (x.kind_of? LongDecimalBase) || x.scale * y.abs <= prec
|
2972
|
+
return x ** y
|
2973
|
+
elsif (y < 0)
|
2974
|
+
l = Math.log10(x.abs.to_f)
|
2975
|
+
if (l > 0)
|
2976
|
+
prec += (2*l).ceil
|
2977
|
+
end
|
2978
|
+
return 1/LongMath.ipower(x, -y, prec, mode)
|
2979
|
+
else
|
2980
|
+
# y > 0
|
2981
|
+
# puts("ipower y>0 x=#{x} y=#{y} prec=#{prec}")
|
2982
|
+
z = x
|
2983
|
+
while true do
|
2984
|
+
|
2985
|
+
y -= 1
|
2986
|
+
if (y.zero?)
|
2987
|
+
break
|
2988
|
+
end
|
2989
|
+
while (y & 0x01) == 0 do
|
2990
|
+
|
2991
|
+
y = y >> 1
|
2992
|
+
x = (x*x)
|
2993
|
+
if (x.kind_of? LongDecimalBase)
|
2994
|
+
x = x.round_to_scale(prec, mode)
|
2995
|
+
end
|
2996
|
+
|
2997
|
+
end
|
2998
|
+
z = (z*x)
|
2999
|
+
if (z.kind_of? LongDecimalBase)
|
3000
|
+
z = z.round_to_scale(prec, mode)
|
3001
|
+
end
|
3002
|
+
|
3003
|
+
end
|
3004
|
+
end
|
3005
|
+
return z
|
3006
|
+
end
|
3007
|
+
|
2873
3008
|
#
|
2874
3009
|
# internal functionality of exp. exposes some more parameters, that
|
2875
3010
|
# should usually be set to defaut values, in order to allow better testing.
|
@@ -2877,7 +3012,7 @@ module LongMath
|
|
2877
3012
|
# create a bug report, if the default settings for the parameters do
|
2878
3013
|
# not work correctly
|
2879
3014
|
#
|
2880
|
-
def LongMath.power_internal(x, y, prec = nil, final_mode =
|
3015
|
+
def LongMath.power_internal(x, y, prec = nil, final_mode = LongMath.standard_mode, iprec = nil, mode = LongMath.standard_imode)
|
2881
3016
|
|
2882
3017
|
if (prec == nil) then
|
2883
3018
|
if (x.kind_of? LongDecimalBase) && (y.kind_of? LongDecimalBase)
|
@@ -2893,7 +3028,7 @@ module LongMath
|
|
2893
3028
|
check_is_prec(prec, "prec")
|
2894
3029
|
|
2895
3030
|
if (final_mode == nil)
|
2896
|
-
final_mode =
|
3031
|
+
final_mode = LongMath.standard_mode
|
2897
3032
|
end
|
2898
3033
|
check_is_mode(final_mode, "final_mode")
|
2899
3034
|
check_is_mode(mode, "mode")
|
@@ -2926,6 +3061,28 @@ module LongMath
|
|
2926
3061
|
|
2927
3062
|
end # power_internal
|
2928
3063
|
|
3064
|
+
@@standard_mode = ROUND_HALF_UP
|
3065
|
+
|
3066
|
+
def LongMath.standard_mode
|
3067
|
+
@@standard_mode
|
3068
|
+
end
|
3069
|
+
|
3070
|
+
def LongMath.standard_mode=(x)
|
3071
|
+
LongMath.check_is_mode
|
3072
|
+
@@standard_mode = x
|
3073
|
+
end
|
3074
|
+
|
3075
|
+
@@standard_imode = ROUND_HALF_EVEN
|
3076
|
+
|
3077
|
+
def LongMath.standard_imode
|
3078
|
+
@@standard_imode
|
3079
|
+
end
|
3080
|
+
|
3081
|
+
def LongMath.standard_imode=(x)
|
3082
|
+
LongMath.check_is_mode
|
3083
|
+
@@standard_imode = x
|
3084
|
+
end
|
3085
|
+
|
2929
3086
|
end # LongMath
|
2930
3087
|
|
2931
3088
|
# end of file long-decimal.rb
|