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.
Files changed (159) hide show
  1. data/README +6 -3
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/doc/classes/LongDecimal.html +207 -189
  5. data/doc/classes/LongDecimal.src/M000036.html +1 -1
  6. data/doc/classes/LongDecimal.src/M000037.html +1 -1
  7. data/doc/classes/LongDecimal.src/M000038.html +1 -1
  8. data/doc/classes/LongDecimal.src/M000039.html +1 -1
  9. data/doc/classes/LongDecimal.src/M000040.html +1 -1
  10. data/doc/classes/LongDecimal.src/M000041.html +1 -1
  11. data/doc/classes/LongDecimal.src/M000042.html +1 -1
  12. data/doc/classes/LongDecimal.src/M000043.html +1 -1
  13. data/doc/classes/LongDecimal.src/M000044.html +1 -1
  14. data/doc/classes/LongDecimal.src/M000045.html +1 -1
  15. data/doc/classes/LongDecimal.src/M000046.html +1 -1
  16. data/doc/classes/LongDecimal.src/M000047.html +1 -1
  17. data/doc/classes/LongDecimal.src/M000048.html +1 -1
  18. data/doc/classes/LongDecimal.src/M000049.html +1 -1
  19. data/doc/classes/LongDecimal.src/M000050.html +15 -2
  20. data/doc/classes/LongDecimal.src/M000051.html +1 -1
  21. data/doc/classes/LongDecimal.src/M000052.html +2 -2
  22. data/doc/classes/LongDecimal.src/M000053.html +1 -1
  23. data/doc/classes/LongDecimal.src/M000054.html +1 -1
  24. data/doc/classes/LongDecimal.src/M000055.html +1 -1
  25. data/doc/classes/LongDecimal.src/M000056.html +1 -1
  26. data/doc/classes/LongDecimal.src/M000057.html +1 -1
  27. data/doc/classes/LongDecimal.src/M000058.html +1 -1
  28. data/doc/classes/LongDecimal.src/M000059.html +1 -1
  29. data/doc/classes/LongDecimal.src/M000060.html +1 -1
  30. data/doc/classes/LongDecimal.src/M000062.html +1 -1
  31. data/doc/classes/LongDecimal.src/M000063.html +1 -1
  32. data/doc/classes/LongDecimal.src/M000064.html +1 -1
  33. data/doc/classes/LongDecimal.src/M000065.html +1 -1
  34. data/doc/classes/LongDecimal.src/M000066.html +4 -8
  35. data/doc/classes/LongDecimal.src/M000067.html +6 -7
  36. data/doc/classes/LongDecimal.src/M000068.html +5 -5
  37. data/doc/classes/LongDecimal.src/M000069.html +6 -6
  38. data/doc/classes/LongDecimal.src/M000070.html +9 -4
  39. data/doc/classes/LongDecimal.src/M000071.html +4 -19
  40. data/doc/classes/LongDecimal.src/M000072.html +15 -5
  41. data/doc/classes/LongDecimal.src/M000073.html +7 -7
  42. data/doc/classes/LongDecimal.src/M000074.html +7 -18
  43. data/doc/classes/LongDecimal.src/M000075.html +20 -7
  44. data/doc/classes/LongDecimal.src/M000076.html +8 -5
  45. data/doc/classes/LongDecimal.src/M000077.html +5 -9
  46. data/doc/classes/LongDecimal.src/M000078.html +5 -5
  47. data/doc/classes/LongDecimal.src/M000079.html +5 -5
  48. data/doc/classes/LongDecimal.src/M000080.html +9 -4
  49. data/doc/classes/LongDecimal.src/M000081.html +4 -7
  50. data/doc/classes/LongDecimal.src/M000082.html +4 -4
  51. data/doc/classes/LongDecimal.src/M000083.html +7 -4
  52. data/doc/classes/LongDecimal.src/M000084.html +4 -4
  53. data/doc/classes/LongDecimal.src/M000085.html +4 -9
  54. data/doc/classes/LongDecimal.src/M000086.html +6 -6
  55. data/doc/classes/LongDecimal.src/M000087.html +9 -5
  56. data/doc/classes/LongDecimal.src/M000088.html +4 -8
  57. data/doc/classes/LongDecimal.src/M000089.html +9 -4
  58. data/doc/classes/LongDecimal.src/M000090.html +4 -4
  59. data/doc/classes/LongDecimal.src/M000091.html +4 -4
  60. data/doc/classes/LongDecimal.src/M000092.html +4 -4
  61. data/doc/classes/LongDecimal.src/M000093.html +4 -59
  62. data/doc/classes/LongDecimal.src/M000094.html +59 -4
  63. data/doc/classes/LongDecimal.src/M000095.html +4 -4
  64. data/doc/classes/LongDecimal.src/M000096.html +4 -5
  65. data/doc/classes/LongDecimal.src/M000099.html +5 -5
  66. data/doc/classes/LongDecimal.src/M000100.html +5 -4
  67. data/doc/classes/LongDecimal.src/M000101.html +4 -4
  68. data/doc/classes/LongDecimal.src/M000102.html +4 -4
  69. data/doc/classes/LongDecimal.src/M000103.html +4 -4
  70. data/doc/classes/LongDecimalBase.html +53 -53
  71. data/doc/classes/LongDecimalBase.src/M000108.html +4 -4
  72. data/doc/classes/LongDecimalBase.src/M000109.html +4 -4
  73. data/doc/classes/LongDecimalBase.src/M000110.html +4 -4
  74. data/doc/classes/LongDecimalBase.src/M000111.html +4 -4
  75. data/doc/classes/LongDecimalBase.src/M000112.html +4 -9
  76. data/doc/classes/LongDecimalBase.src/M000113.html +9 -9
  77. data/doc/classes/LongDecimalBase.src/M000116.html +9 -5
  78. data/doc/classes/LongDecimalBase.src/M000117.html +5 -4
  79. data/doc/classes/LongDecimalQuot.html +1 -1
  80. data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
  81. data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
  82. data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
  83. data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
  84. data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
  85. data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
  86. data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
  87. data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
  88. data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
  89. data/doc/classes/LongDecimalQuot.src/M000012.html +2 -2
  90. data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
  91. data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
  92. data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
  93. data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
  94. data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
  95. data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
  96. data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
  97. data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
  98. data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
  99. data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
  100. data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
  101. data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
  102. data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
  103. data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
  104. data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
  105. data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
  106. data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
  107. data/doc/classes/LongDecimalQuot.src/M000030.html +1 -1
  108. data/doc/classes/LongDecimalQuot.src/M000031.html +1 -1
  109. data/doc/classes/LongDecimalQuot.src/M000034.html +1 -1
  110. data/doc/classes/LongDecimalQuot.src/M000035.html +1 -1
  111. data/doc/classes/LongDecimalRoundingMode.html +6 -1
  112. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +37 -16
  113. data/doc/classes/LongMath.html +246 -161
  114. data/doc/classes/LongMath.src/M000119.html +5 -4
  115. data/doc/classes/LongMath.src/M000120.html +4 -4
  116. data/doc/classes/LongMath.src/M000121.html +4 -5
  117. data/doc/classes/LongMath.src/M000122.html +5 -4
  118. data/doc/classes/LongMath.src/M000123.html +4 -18
  119. data/doc/classes/LongMath.src/M000124.html +14 -14
  120. data/doc/classes/LongMath.src/M000125.html +18 -5
  121. data/doc/classes/LongMath.src/M000126.html +5 -29
  122. data/doc/classes/LongMath.src/M000127.html +29 -5
  123. data/doc/classes/LongMath.src/M000128.html +5 -57
  124. data/doc/classes/LongMath.src/M000129.html +55 -19
  125. data/doc/classes/LongMath.src/M000130.html +20 -35
  126. data/doc/classes/LongMath.src/M000131.html +36 -6
  127. data/doc/classes/LongMath.src/M000132.html +6 -33
  128. data/doc/classes/LongMath.src/M000133.html +26 -44
  129. data/doc/classes/LongMath.src/M000134.html +49 -5
  130. data/doc/classes/LongMath.src/M000135.html +7 -4
  131. data/doc/classes/LongMath.src/M000136.html +4 -4
  132. data/doc/classes/LongMath.src/M000137.html +4 -72
  133. data/doc/classes/LongMath.src/M000138.html +67 -39
  134. data/doc/classes/LongMath.src/M000139.html +44 -4
  135. data/doc/classes/LongMath.src/M000140.html +4 -4
  136. data/doc/classes/LongMath.src/M000141.html +4 -6
  137. data/doc/classes/LongMath.src/M000142.html +4 -18
  138. data/doc/classes/LongMath.src/M000143.html +8 -7
  139. data/doc/classes/LongMath.src/M000144.html +10 -35
  140. data/doc/classes/LongMath.src/M000145.html +23 -202
  141. data/doc/classes/LongMath.src/M000146.html +322 -4
  142. data/doc/classes/LongMath.src/M000147.html +22 -63
  143. data/doc/classes/LongMath.src/M000148.html +65 -33
  144. data/doc/classes/LongMath/CacheKey.html +5 -5
  145. data/doc/classes/Numeric.html +11 -11
  146. data/doc/classes/Numeric.src/M000105.html +9 -4
  147. data/doc/classes/Rational.html +6 -6
  148. data/doc/created.rid +1 -1
  149. data/doc/files/lib/long-decimal_rb.html +2 -2
  150. data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
  151. data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
  152. data/doc/fr_method_index.html +102 -95
  153. data/lib/long-decimal.rb +206 -49
  154. data/test/testlongdecimal.rb +736 -21
  155. data/test/testlongdeclib.rb +136 -25
  156. data/test/testrandlib.rb +87 -0
  157. data/test/testrandom.rb +30 -45
  158. data/test/testrandpower.rb +72 -0
  159. 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="#M000149">&lt;=&gt;</a>&nbsp;&nbsp;
106
+ <a href="#M000155">&lt;=&gt;</a>&nbsp;&nbsp;
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-M000149" class="method-detail">
136
- <a name="M000149"></a>
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/M000149.html" target="Code" class="method-signature"
140
- onclick="popupCode('CacheKey.src/M000149.html');return false;">
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">&lt;=&gt;</span><span class="method-args">(o)</span>
142
142
  </a>
143
143
  </div>
@@ -101,8 +101,8 @@
101
101
  <h3 class="section-bar">Methods</h3>
102
102
 
103
103
  <div class="name-list">
104
- <a href="#M000105">one?</a>&nbsp;&nbsp;
105
- <a href="#M000104">to_ld</a>&nbsp;&nbsp;
104
+ <a href="#M000106">one?</a>&nbsp;&nbsp;
105
+ <a href="#M000105">to_ld</a>&nbsp;&nbsp;
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-M000105" class="method-detail">
128
- <a name="M000105"></a>
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/M000105.html" target="Code" class="method-signature"
132
- onclick="popupCode('Numeric.src/M000105.html');return false;">
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-M000104" class="method-detail">
145
- <a name="M000104"></a>
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/M000104.html" target="Code" class="method-signature"
149
- onclick="popupCode('Numeric.src/M000104.html');return false;">
150
- <span class="method-name">to_ld</span><span class="method-args">(prec = nil, mode = LongDecimal::ROUND_HALF_UP)</span>
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>one? (Numeric)</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 1797</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">one?</span>
15
- (<span class="ruby-keyword kw">self</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">zero?</span>
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>
@@ -101,7 +101,7 @@
101
101
  <h3 class="section-bar">Methods</h3>
102
102
 
103
103
  <div class="name-list">
104
- <a href="#M000106">to_ld</a>&nbsp;&nbsp;
104
+ <a href="#M000107">to_ld</a>&nbsp;&nbsp;
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-M000106" class="method-detail">
127
- <a name="M000106"></a>
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/M000106.html" target="Code" class="method-signature"
131
- onclick="popupCode('Rational.src/M000106.html');return false;">
132
- <span class="method-name">to_ld</span><span class="method-args">(prec = nil, mode = LongDecimal::ROUND_HALF_UP)</span>
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
 
@@ -1 +1 @@
1
- Tue Apr 11 22:08:00 CEST 2006
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>Tue Apr 11 22:02:00 CEST 2006</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.33 2006/04/11 19:03:22 bk1 Exp $ CVS-Label: $Name: ALPHA_01_00 $ Author:
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 1760</span>
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">&amp;&amp;</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 1773</span>
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>
@@ -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">& (LongDecimal)</a><br />
26
- <a href="classes/LongDecimal.html#M000069">* (LongDecimal)</a><br />
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#M000074">** (LongDecimal)</a><br />
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/LongDecimal.html#M000067">+ (LongDecimal)</a><br />
32
- <a href="classes/LongDecimalBase.html#M000110">+@ (LongDecimalBase)</a><br />
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#M000073">/ (LongDecimal)</a><br />
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#M000081"><< (LongDecimal)</a><br />
40
- <a href="classes/LongDecimalBase.html#M000115"><=> (LongDecimalBase)</a><br />
41
- <a href="classes/LongMath/CacheKey.html#M000149"><=> (LongMath::CacheKey)</a><br />
42
- <a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000150"><=> (LongDecimalRoundingMode::RoundingModeClass)</a><br />
43
- <a href="classes/LongDecimal.html#M000098">== (LongDecimal)</a><br />
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#M000099">=== (LongDecimal)</a><br />
46
- <a href="classes/LongDecimal.html#M000082">>> (LongDecimal)</a><br />
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#M000083">[] (LongDecimal)</a><br />
50
- <a href="classes/LongDecimal.html#M000079">^ (LongDecimal)</a><br />
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/LongDecimalBase.html#M000114">abs2 (LongDecimalBase)</a><br />
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#M000146">calc_iprec_for_power (LongMath)</a><br />
56
- <a href="classes/LongMath.html#M000119">check_is_int (LongMath)</a><br />
57
- <a href="classes/LongMath.html#M000120">check_is_ld (LongMath)</a><br />
58
- <a href="classes/LongMath.html#M000122">check_is_mode (LongMath)</a><br />
59
- <a href="classes/LongMath.html#M000121">check_is_prec (LongMath)</a><br />
60
- <a href="classes/LongMath.html#M000118">check_word_len (LongMath)</a><br />
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#M000093">coerce (LongDecimal)</a><br />
63
- <a href="classes/LongDecimalBase.html#M000109">dec (LongDecimalBase)</a><br />
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#M000070">divide (LongDecimal)</a><br />
69
- <a href="classes/LongDecimal.html#M000071">divide_s (LongDecimal)</a><br />
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#M000134">exp (LongMath)</a><br />
74
- <a href="classes/LongMath.html#M000136">exp10 (LongMath)</a><br />
75
- <a href="classes/LongMath.html#M000135">exp2 (LongMath)</a><br />
76
- <a href="classes/LongMath.html#M000137">exp_internal (LongMath)</a><br />
77
- <a href="classes/LongMath.html#M000138">exp_raw (LongMath)</a><br />
78
- <a href="classes/LongMath.html#M000129">gcd_with_high_power (LongMath)</a><br />
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/LongDecimal.html#M000102">hash (LongDecimal)</a><br />
81
- <a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000152">hash (LongDecimalRoundingMode::RoundingModeClass)</a><br />
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/LongDecimal.html#M000103">inspect (LongDecimal)</a><br />
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/LongMath.html#M000132">int_digits10 (LongMath)</a><br />
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/LongDecimalRoundingMode/RoundingModeClass.html#M000151">inverse (LongDecimalRoundingMode::RoundingModeClass)</a><br />
91
- <a href="classes/LongDecimalBase.html#M000113">inverse (LongDecimalBase)</a><br />
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/LongDecimal.html#M000094">is_int? (LongDecimal)</a><br />
94
- <a href="classes/LongMath.html#M000141">log (LongMath)</a><br />
95
- <a href="classes/LongMath.html#M000142">log10 (LongMath)</a><br />
96
- <a href="classes/LongMath.html#M000143">log2 (LongMath)</a><br />
97
- <a href="classes/LongMath.html#M000144">log_internal (LongMath)</a><br />
98
- <a href="classes/LongMath.html#M000145">log_raw (LongMath)</a><br />
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/LongDecimal.html#M000085">move_point_left (LongDecimal)</a><br />
102
- <a href="classes/LongDecimal.html#M000087">move_point_left_int (LongDecimal)</a><br />
103
- <a href="classes/LongDecimal.html#M000086">move_point_right (LongDecimal)</a><br />
104
- <a href="classes/LongDecimal.html#M000088">move_point_right_int (LongDecimal)</a><br />
105
- <a href="classes/LongMath.html#M000131">multiplicity_of_10 (LongMath)</a><br />
106
- <a href="classes/LongMath.html#M000130">multiplicity_of_factor (LongMath)</a><br />
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/Numeric.html#M000105">one? (Numeric)</a><br />
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/LongDecimal.html#M000101">one? (LongDecimal)</a><br />
117
- <a href="classes/LongMath.html#M000133">pi (LongMath)</a><br />
118
- <a href="classes/LongMath.html#M000147">power (LongMath)</a><br />
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#M000072">rdiv (LongDecimal)</a><br />
123
- <a href="classes/LongDecimalBase.html#M000112">reciprocal (LongDecimalBase)</a><br />
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/LongDecimalBase.html#M000117">scale_equal (LongDecimalBase)</a><br />
130
- <a href="classes/LongDecimalBase.html#M000116">scale_ufo (LongDecimalBase)</a><br />
131
- <a href="classes/LongDecimal.html#M000095">sgn (LongDecimal)</a><br />
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#M000097">sign (LongDecimal)</a><br />
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/LongDecimalQuot.html#M000013">sint_digits10 (LongDecimalQuot)</a><br />
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/LongDecimal.html#M000084">size (LongDecimal)</a><br />
140
- <a href="classes/LongMath.html#M000123">split_to_words (LongMath)</a><br />
141
- <a href="classes/LongDecimal.html#M000090">sqrt (LongDecimal)</a><br />
142
- <a href="classes/LongMath.html#M000139">sqrt (LongMath)</a><br />
143
- <a href="classes/LongDecimal.html#M000091">sqrt_with_remainder (LongDecimal)</a><br />
144
- <a href="classes/LongMath.html#M000140">sqrt_with_remainder (LongMath)</a><br />
145
- <a href="classes/LongMath.html#M000125">sqrtb (LongMath)</a><br />
146
- <a href="classes/LongMath.html#M000126">sqrtb_with_remainder (LongMath)</a><br />
147
- <a href="classes/LongMath.html#M000127">sqrtw (LongMath)</a><br />
148
- <a href="classes/LongMath.html#M000128">sqrtw_with_remainder (LongMath)</a><br />
149
- <a href="classes/LongDecimalBase.html#M000111">square (LongDecimalBase)</a><br />
150
- <a href="classes/LongDecimal.html#M000089">square (LongDecimal)</a><br />
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/LongDecimalQuot.html#M000011">to_i (LongDecimalQuot)</a><br />
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/Rational.html#M000106">to_ld (Rational)</a><br />
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#M000107">to_r (LongDecimalBase)</a><br />
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#M000100">zero? (LongDecimal)</a><br />
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#M000078">| (LongDecimal)</a><br />
174
- <a href="classes/LongDecimal.html#M000080">~ (LongDecimal)</a><br />
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>
@@ -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.33 2006/04/11 19:03:22 bk1 Exp $
5
- # CVS-Label: $Name: ALPHA_01_00 $
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
- def inverse
41
- LongDecimalRoundingMode::INVERSE_MODE[self]
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
- INVERSE_MODE = {
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.33 2006/04/11 19:03:22 bk1 Exp $-'
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.33 2006/04/11 19:03:22 bk1 Exp $-'
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
- return 0.0
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 = LongDecimal::ROUND_HALF_UP)
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.33 2006/04/11 19:03:22 bk1 Exp $-'
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 = LongDecimal::ROUND_HALF_UP)
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 = LongDecimal::ROUND_HALF_UP)
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 = LongDecimal::ROUND_HALF_UP)
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 = Float::MAX.to_i
1835
- MAX_EXP_ABLE = Math.log(MAX_FLOATABLE).to_i
1836
- LOG2 = Math.log(2.0)
1837
- LOG10 = Math.log(10.0)
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 = LongDecimal::ROUND_HALF_DOWN, iprec = nil, mode = nil, cache_result = true)
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 = LongDecimal::ROUND_HALF_DOWN
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 = LongDecimal::ROUND_HALF_DOWN)
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 = LongDecimal::ROUND_HALF_DOWN)
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 = LongDecimal::ROUND_HALF_DOWN)
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 = LongDecimal::ROUND_HALF_DOWN, j = nil, k = nil, iprec = nil, mode = LongDecimal::ROUND_HALF_DOWN, cache_result = true)
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 = LongDecimal::ROUND_HALF_DOWN
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 = LongDecimal::ROUND_HALF_DOWN)
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 = LongDecimal::ROUND_HALF_DOWN)
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 = LongDecimal::ROUND_HALF_DOWN)
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 + 5
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 = LongDecimal::ROUND_HALF_DOWN)
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 = LongDecimal::ROUND_HALF_DOWN, iprec = nil, mode = LongDecimal::ROUND_HALF_DOWN, cache_result = true)
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 = LongDecimal::ROUND_HALF_DOWN
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
- # t0 = Time.new
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
- x = (1 / x).round_to_scale(iprec, mode)
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, mode)
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, mode)
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, mode)
2765
- d = (p / i).round_to_scale(iprec, mode)
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 = LongDecimal::ROUND_HALF_DOWN)
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, LongDecimal::ROUND_HALF_UP).to_i
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 + 3, mode)
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 = LongDecimal::ROUND_HALF_DOWN, iprec = nil, mode = LongDecimal::ROUND_HALF_DOWN)
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 = LongDecimal::ROUND_HALF_DOWN
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