long-decimal 0.01.00 → 0.01.01
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|