long-decimal 0.00.21 → 0.00.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) hide show
  1. data/README +23 -16
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/doc/classes/LongDecimal.html +343 -343
  5. data/doc/classes/LongDecimal.src/M000036.html +4 -4
  6. data/doc/classes/LongDecimal.src/M000037.html +4 -4
  7. data/doc/classes/LongDecimal.src/M000038.html +4 -4
  8. data/doc/classes/LongDecimal.src/M000039.html +4 -4
  9. data/doc/classes/LongDecimal.src/M000040.html +4 -6
  10. data/doc/classes/LongDecimal.src/M000041.html +4 -106
  11. data/doc/classes/LongDecimal.src/M000042.html +6 -21
  12. data/doc/classes/LongDecimal.src/M000043.html +105 -10
  13. data/doc/classes/LongDecimal.src/M000044.html +17 -23
  14. data/doc/classes/LongDecimal.src/M000045.html +10 -18
  15. data/doc/classes/LongDecimal.src/M000046.html +27 -4
  16. data/doc/classes/LongDecimal.src/M000047.html +17 -13
  17. data/doc/classes/LongDecimal.src/M000048.html +4 -28
  18. data/doc/classes/LongDecimal.src/M000049.html +15 -4
  19. data/doc/classes/LongDecimal.src/M000050.html +26 -6
  20. data/doc/classes/LongDecimal.src/M000051.html +4 -6
  21. data/doc/classes/LongDecimal.src/M000052.html +8 -4
  22. data/doc/classes/LongDecimal.src/M000053.html +6 -15
  23. data/doc/classes/LongDecimal.src/M000054.html +4 -7
  24. data/doc/classes/LongDecimal.src/M000055.html +15 -4
  25. data/doc/classes/LongDecimal.src/M000056.html +6 -14
  26. data/doc/classes/LongDecimal.src/M000057.html +4 -13
  27. data/doc/classes/LongDecimal.src/M000058.html +15 -4
  28. data/doc/classes/LongDecimal.src/M000059.html +13 -4
  29. data/doc/classes/LongDecimal.src/M000060.html +4 -4
  30. data/doc/classes/LongDecimal.src/M000062.html +4 -5
  31. data/doc/classes/LongDecimal.src/M000063.html +5 -4
  32. data/doc/classes/LongDecimal.src/M000064.html +5 -8
  33. data/doc/classes/LongDecimal.src/M000065.html +4 -9
  34. data/doc/classes/LongDecimal.src/M000066.html +6 -7
  35. data/doc/classes/LongDecimal.src/M000067.html +6 -6
  36. data/doc/classes/LongDecimal.src/M000068.html +9 -4
  37. data/doc/classes/LongDecimal.src/M000069.html +7 -13
  38. data/doc/classes/LongDecimal.src/M000070.html +4 -9
  39. data/doc/classes/LongDecimal.src/M000071.html +13 -7
  40. data/doc/classes/LongDecimal.src/M000072.html +7 -18
  41. data/doc/classes/LongDecimal.src/M000073.html +8 -7
  42. data/doc/classes/LongDecimal.src/M000074.html +20 -5
  43. data/doc/classes/LongDecimal.src/M000075.html +7 -8
  44. data/doc/classes/LongDecimal.src/M000076.html +5 -9
  45. data/doc/classes/LongDecimal.src/M000077.html +5 -5
  46. data/doc/classes/LongDecimal.src/M000078.html +9 -4
  47. data/doc/classes/LongDecimal.src/M000079.html +8 -6
  48. data/doc/classes/LongDecimal.src/M000080.html +4 -7
  49. data/doc/classes/LongDecimal.src/M000081.html +7 -4
  50. data/doc/classes/LongDecimal.src/M000082.html +7 -4
  51. data/doc/classes/LongDecimal.src/M000083.html +4 -9
  52. data/doc/classes/LongDecimal.src/M000084.html +4 -9
  53. data/doc/classes/LongDecimal.src/M000085.html +9 -5
  54. data/doc/classes/LongDecimal.src/M000086.html +7 -7
  55. data/doc/classes/LongDecimal.src/M000087.html +5 -4
  56. data/doc/classes/LongDecimal.src/M000088.html +9 -4
  57. data/doc/classes/LongDecimal.src/M000089.html +4 -4
  58. data/doc/classes/LongDecimal.src/M000090.html +4 -4
  59. data/doc/classes/LongDecimal.src/M000091.html +4 -59
  60. data/doc/classes/LongDecimal.src/M000092.html +4 -4
  61. data/doc/classes/LongDecimal.src/M000093.html +59 -4
  62. data/doc/classes/LongDecimal.src/M000094.html +4 -5
  63. data/doc/classes/LongDecimal.src/M000095.html +4 -4
  64. data/doc/classes/LongDecimal.src/M000098.html +5 -4
  65. data/doc/classes/LongDecimal.src/M000099.html +5 -4
  66. data/doc/classes/LongDecimal.src/M000100.html +4 -4
  67. data/doc/classes/LongDecimal.src/M000101.html +4 -4
  68. data/doc/classes/LongDecimalBase.html +53 -53
  69. data/doc/classes/LongDecimalBase.src/M000107.html +4 -4
  70. data/doc/classes/LongDecimalBase.src/M000108.html +4 -4
  71. data/doc/classes/LongDecimalBase.src/M000109.html +4 -4
  72. data/doc/classes/LongDecimalBase.src/M000110.html +4 -4
  73. data/doc/classes/LongDecimalBase.src/M000111.html +4 -5
  74. data/doc/classes/LongDecimalBase.src/M000112.html +9 -9
  75. data/doc/classes/LongDecimalBase.src/M000115.html +23 -0
  76. data/doc/classes/LongDecimalQuot.html +174 -133
  77. data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
  78. data/doc/classes/LongDecimalQuot.src/M000004.html +2 -1
  79. data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
  80. data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
  81. data/doc/classes/LongDecimalQuot.src/M000007.html +6 -5
  82. data/doc/classes/LongDecimalQuot.src/M000008.html +5 -4
  83. data/doc/classes/LongDecimalQuot.src/M000009.html +4 -4
  84. data/doc/classes/LongDecimalQuot.src/M000010.html +4 -4
  85. data/doc/classes/LongDecimalQuot.src/M000011.html +4 -4
  86. data/doc/classes/LongDecimalQuot.src/M000012.html +4 -4
  87. data/doc/classes/LongDecimalQuot.src/M000013.html +7 -4
  88. data/doc/classes/LongDecimalQuot.src/M000014.html +5 -8
  89. data/doc/classes/LongDecimalQuot.src/M000015.html +5 -9
  90. data/doc/classes/LongDecimalQuot.src/M000016.html +6 -7
  91. data/doc/classes/LongDecimalQuot.src/M000017.html +4 -4
  92. data/doc/classes/LongDecimalQuot.src/M000018.html +4 -4
  93. data/doc/classes/LongDecimalQuot.src/M000019.html +6 -18
  94. data/doc/classes/LongDecimalQuot.src/M000020.html +8 -7
  95. data/doc/classes/LongDecimalQuot.src/M000021.html +21 -5
  96. data/doc/classes/LongDecimalQuot.src/M000022.html +8 -4
  97. data/doc/classes/LongDecimalQuot.src/M000023.html +5 -96
  98. data/doc/classes/LongDecimalQuot.src/M000024.html +4 -38
  99. data/doc/classes/LongDecimalQuot.src/M000025.html +96 -4
  100. data/doc/classes/LongDecimalQuot.src/M000026.html +38 -4
  101. data/doc/classes/LongDecimalQuot.src/M000027.html +4 -4
  102. data/doc/classes/LongDecimalQuot.src/M000028.html +4 -4
  103. data/doc/classes/LongDecimalQuot.src/M000029.html +4 -4
  104. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +10 -10
  105. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000148.html +22 -0
  106. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000149.html +18 -0
  107. data/doc/classes/LongMath.html +159 -161
  108. data/doc/classes/LongMath.src/M000118.html +5 -4
  109. data/doc/classes/LongMath.src/M000119.html +4 -5
  110. data/doc/classes/LongMath.src/M000120.html +4 -4
  111. data/doc/classes/LongMath.src/M000121.html +5 -18
  112. data/doc/classes/LongMath.src/M000122.html +4 -18
  113. data/doc/classes/LongMath.src/M000123.html +18 -5
  114. data/doc/classes/LongMath.src/M000124.html +16 -27
  115. data/doc/classes/LongMath.src/M000125.html +4 -4
  116. data/doc/classes/LongMath.src/M000126.html +17 -45
  117. data/doc/classes/LongMath.src/M000127.html +5 -21
  118. data/doc/classes/LongMath.src/M000128.html +50 -29
  119. data/doc/classes/LongMath.src/M000129.html +21 -6
  120. data/doc/classes/LongMath.src/M000130.html +31 -28
  121. data/doc/classes/LongMath.src/M000131.html +6 -48
  122. data/doc/classes/LongMath.src/M000132.html +33 -8
  123. data/doc/classes/LongMath.src/M000133.html +51 -4
  124. data/doc/classes/LongMath.src/M000134.html +7 -4
  125. data/doc/classes/LongMath.src/M000135.html +4 -64
  126. data/doc/classes/LongMath.src/M000136.html +4 -43
  127. data/doc/classes/LongMath.src/M000137.html +64 -4
  128. data/doc/classes/LongMath.src/M000138.html +43 -4
  129. data/doc/classes/LongMath.src/M000139.html +4 -7
  130. data/doc/classes/LongMath.src/M000140.html +4 -20
  131. data/doc/classes/LongMath.src/M000141.html +4 -18
  132. data/doc/classes/LongMath.src/M000142.html +11 -34
  133. data/doc/classes/LongMath.src/M000143.html +13 -253
  134. data/doc/classes/LongMath.src/M000144.html +40 -16
  135. data/doc/classes/LongMath.src/M000145.html +227 -0
  136. data/doc/classes/LongMath.src/M000146.html +33 -0
  137. data/doc/classes/LongMath/CacheKey.html +6 -6
  138. data/doc/classes/LongMath/CacheKey.src/M000147.html +36 -0
  139. data/doc/classes/Numeric.html +10 -10
  140. data/doc/classes/Numeric.src/M000103.html +18 -0
  141. data/doc/classes/Rational.html +5 -5
  142. data/doc/classes/Rational.src/M000104.html +23 -0
  143. data/doc/created.rid +1 -1
  144. data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
  145. data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
  146. data/doc/fr_method_index.html +145 -143
  147. data/lib/long-decimal.rb +52 -71
  148. data/test/testlongdecimal.rb +218 -449
  149. data/test/testlongdeclib.rb +485 -0
  150. data/test/testrandom.rb +75 -0
  151. data/version.rb +1 -1
  152. metadata +12 -3
  153. data/doc/files/lib/long-decimal_rb.html +0 -189
@@ -101,7 +101,7 @@
101
101
  <h3 class="section-bar">Methods</h3>
102
102
 
103
103
  <div class="name-list">
104
- <a href="#M000104">to_ld</a>&nbsp;&nbsp;
104
+ <a href="#M000106">to_ld</a>&nbsp;&nbsp;
105
105
  </div>
106
106
  </div>
107
107
 
@@ -123,12 +123,12 @@
123
123
  <div id="methods">
124
124
  <h3 class="section-bar">Public Instance methods</h3>
125
125
 
126
- <div id="method-M000104" class="method-detail">
127
- <a name="M000104"></a>
126
+ <div id="method-M000106" class="method-detail">
127
+ <a name="M000106"></a>
128
128
 
129
129
  <div class="method-heading">
130
- <a href="Rational.src/M000104.html" target="Code" class="method-signature"
131
- onclick="popupCode('Rational.src/M000104.html');return false;">
130
+ <a href="Rational.src/M000106.html" target="Code" class="method-signature"
131
+ onclick="popupCode('Rational.src/M000106.html');return false;">
132
132
  <span class="method-name">to_ld</span><span class="method-args">(prec = nil, mode = LongDecimal::ROUND_HALF_UP)</span>
133
133
  </a>
134
134
  </div>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>to_ld (Rational)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1731</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">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_UP</span>)
15
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">prec</span>.<span class="ruby-identifier">nil?</span>)
16
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>(<span class="ruby-keyword kw">self</span>)
17
+ <span class="ruby-keyword kw">else</span>
18
+ <span class="ruby-identifier">l</span> = <span class="ruby-constant">LongDecimalQuot</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">prec</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>
21
+ <span class="ruby-keyword kw">end</span></pre>
22
+ </body>
23
+ </html>
data/doc/created.rid CHANGED
@@ -1 +1 @@
1
- Thu Apr 06 01:55:52 CEST 2006
1
+ Sat Apr 08 00:49:02 CEST 2006
@@ -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 1679</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1709</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 1692</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1722</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,155 +20,157 @@
20
20
  <div id="index">
21
21
  <h1 class="section-bar">Methods</h1>
22
22
  <div id="index-entries">
23
- <a href="classes/LongDecimalQuot.html#M000021">% (LongDecimalQuot)</a><br />
24
- <a href="classes/LongDecimal.html#M000074">% (LongDecimal)</a><br />
25
- <a href="classes/LongDecimal.html#M000075">& (LongDecimal)</a><br />
26
- <a href="classes/LongDecimal.html#M000067">* (LongDecimal)</a><br />
27
- <a href="classes/LongDecimalQuot.html#M000017">* (LongDecimalQuot)</a><br />
28
- <a href="classes/LongDecimalQuot.html#M000019">** (LongDecimalQuot)</a><br />
29
- <a href="classes/LongDecimal.html#M000072">** (LongDecimal)</a><br />
30
- <a href="classes/LongDecimal.html#M000065">+ (LongDecimal)</a><br />
31
- <a href="classes/LongDecimalQuot.html#M000015">+ (LongDecimalQuot)</a><br />
32
- <a href="classes/LongDecimalBase.html#M000108">+@ (LongDecimalBase)</a><br />
33
- <a href="classes/LongDecimal.html#M000066">- (LongDecimal)</a><br />
34
- <a href="classes/LongDecimalQuot.html#M000016">- (LongDecimalQuot)</a><br />
35
- <a href="classes/LongDecimal.html#M000064">-@ (LongDecimal)</a><br />
36
- <a href="classes/LongDecimalQuot.html#M000014">-@ (LongDecimalQuot)</a><br />
37
- <a href="classes/LongDecimalQuot.html#M000018">/ (LongDecimalQuot)</a><br />
38
- <a href="classes/LongDecimal.html#M000071">/ (LongDecimal)</a><br />
39
- <a href="classes/LongDecimal.html#M000079"><< (LongDecimal)</a><br />
40
- <a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000148"><=> (LongDecimalRoundingMode::RoundingModeClass)</a><br />
41
- <a href="classes/LongMath/CacheKey.html#M000147"><=> (LongMath::CacheKey)</a><br />
42
- <a href="classes/LongDecimalBase.html#M000113"><=> (LongDecimalBase)</a><br />
43
- <a href="classes/LongDecimal.html#M000096">== (LongDecimal)</a><br />
44
- <a href="classes/LongDecimalQuot.html#M000025">== (LongDecimalQuot)</a><br />
45
- <a href="classes/LongDecimal.html#M000097">=== (LongDecimal)</a><br />
46
- <a href="classes/LongDecimal.html#M000080">>> (LongDecimal)</a><br />
23
+ <a href="classes/LongDecimal.html#M000076">% (LongDecimal)</a><br />
24
+ <a href="classes/LongDecimalQuot.html#M000023">% (LongDecimalQuot)</a><br />
25
+ <a href="classes/LongDecimal.html#M000077">& (LongDecimal)</a><br />
26
+ <a href="classes/LongDecimalQuot.html#M000019">* (LongDecimalQuot)</a><br />
27
+ <a href="classes/LongDecimal.html#M000069">* (LongDecimal)</a><br />
28
+ <a href="classes/LongDecimal.html#M000074">** (LongDecimal)</a><br />
29
+ <a href="classes/LongDecimalQuot.html#M000021">** (LongDecimalQuot)</a><br />
30
+ <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/LongDecimalQuot.html#M000018">- (LongDecimalQuot)</a><br />
34
+ <a href="classes/LongDecimal.html#M000068">- (LongDecimal)</a><br />
35
+ <a href="classes/LongDecimalQuot.html#M000016">-@ (LongDecimalQuot)</a><br />
36
+ <a href="classes/LongDecimal.html#M000066">-@ (LongDecimal)</a><br />
37
+ <a href="classes/LongDecimalQuot.html#M000020">/ (LongDecimalQuot)</a><br />
38
+ <a href="classes/LongDecimal.html#M000073">/ (LongDecimal)</a><br />
39
+ <a href="classes/LongDecimal.html#M000081"><< (LongDecimal)</a><br />
40
+ <a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000150"><=> (LongDecimalRoundingMode::RoundingModeClass)</a><br />
41
+ <a href="classes/LongDecimalBase.html#M000115"><=> (LongDecimalBase)</a><br />
42
+ <a href="classes/LongMath/CacheKey.html#M000149"><=> (LongMath::CacheKey)</a><br />
43
+ <a href="classes/LongDecimal.html#M000098">== (LongDecimal)</a><br />
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 />
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#M000081">[] (LongDecimal)</a><br />
50
- <a href="classes/LongDecimal.html#M000077">^ (LongDecimal)</a><br />
51
- <a href="classes/LongDecimal.html#M000090">abs (LongDecimal)</a><br />
52
- <a href="classes/LongDecimalQuot.html#M000022">abs (LongDecimalQuot)</a><br />
53
- <a href="classes/LongDecimalBase.html#M000112">abs2 (LongDecimalBase)</a><br />
54
- <a href="classes/LongDecimal.html#M000057">anti_equalize_scale (LongDecimal)</a><br />
55
- <a href="classes/LongMath.html#M000144">calc_iprec_for_power (LongMath)</a><br />
56
- <a href="classes/LongMath.html#M000117">check_is_int (LongMath)</a><br />
57
- <a href="classes/LongMath.html#M000118">check_is_ld (LongMath)</a><br />
58
- <a href="classes/LongMath.html#M000120">check_is_mode (LongMath)</a><br />
59
- <a href="classes/LongMath.html#M000119">check_is_prec (LongMath)</a><br />
60
- <a href="classes/LongMath.html#M000116">check_word_len (LongMath)</a><br />
61
- <a href="classes/LongDecimal.html#M000091">coerce (LongDecimal)</a><br />
62
- <a href="classes/LongDecimalQuot.html#M000024">coerce (LongDecimalQuot)</a><br />
63
- <a href="classes/LongDecimalBase.html#M000107">dec (LongDecimalBase)</a><br />
64
- <a href="classes/LongDecimal.html#M000062">dec! (LongDecimal)</a><br />
65
- <a href="classes/LongDecimalQuot.html#M000013">dec! (LongDecimalQuot)</a><br />
66
- <a href="classes/LongDecimal.html#M000052">denominator (LongDecimal)</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 />
52
+ <a href="classes/LongDecimalQuot.html#M000024">abs (LongDecimalQuot)</a><br />
53
+ <a href="classes/LongDecimalBase.html#M000114">abs2 (LongDecimalBase)</a><br />
54
+ <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 />
61
+ <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 />
65
+ <a href="classes/LongDecimalQuot.html#M000015">dec! (LongDecimalQuot)</a><br />
67
66
  <a href="classes/LongDecimalQuot.html#M000006">denominator (LongDecimalQuot)</a><br />
68
- <a href="classes/LongDecimal.html#M000068">divide (LongDecimal)</a><br />
69
- <a href="classes/LongDecimal.html#M000069">divide_s (LongDecimal)</a><br />
70
- <a href="classes/LongDecimal.html#M000073">divmod (LongDecimal)</a><br />
71
- <a href="classes/LongDecimalQuot.html#M000020">divmod (LongDecimalQuot)</a><br />
72
- <a href="classes/LongDecimal.html#M000056">equalize_scale (LongDecimal)</a><br />
73
- <a href="classes/LongMath.html#M000132">exp (LongMath)</a><br />
74
- <a href="classes/LongMath.html#M000134">exp10 (LongMath)</a><br />
75
- <a href="classes/LongMath.html#M000133">exp2 (LongMath)</a><br />
76
- <a href="classes/LongMath.html#M000135">exp_internal (LongMath)</a><br />
77
- <a href="classes/LongMath.html#M000136">exp_raw (LongMath)</a><br />
78
- <a href="classes/LongMath.html#M000127">gcd_with_high_power (LongMath)</a><br />
79
- <a href="classes/LongDecimalQuot.html#M000032">hash (LongDecimalQuot)</a><br />
80
- <a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000149">hash (LongDecimalRoundingMode::RoundingModeClass)</a><br />
81
- <a href="classes/LongDecimal.html#M000100">hash (LongDecimal)</a><br />
82
- <a href="classes/LongDecimalBase.html#M000106">inc (LongDecimalBase)</a><br />
83
- <a href="classes/LongDecimal.html#M000061">inc! (LongDecimal)</a><br />
84
- <a href="classes/LongDecimalQuot.html#M000012">inc! (LongDecimalQuot)</a><br />
85
- <a href="classes/LongDecimal.html#M000101">inspect (LongDecimal)</a><br />
86
- <a href="classes/LongDecimalQuot.html#M000033">inspect (LongDecimalQuot)</a><br />
87
- <a href="classes/LongDecimal.html#M000055">int_digits10 (LongDecimal)</a><br />
88
- <a href="classes/LongMath.html#M000130">int_digits10 (LongMath)</a><br />
89
- <a href="classes/LongDecimal.html#M000053">int_digits2 (LongDecimal)</a><br />
90
- <a href="classes/LongDecimalBase.html#M000111">inverse (LongDecimalBase)</a><br />
91
- <a href="classes/LongDecimalQuot.html#M000028">is_int? (LongDecimalQuot)</a><br />
92
- <a href="classes/LongDecimal.html#M000092">is_int? (LongDecimal)</a><br />
93
- <a href="classes/LongMath.html#M000139">log (LongMath)</a><br />
94
- <a href="classes/LongMath.html#M000140">log10 (LongMath)</a><br />
95
- <a href="classes/LongMath.html#M000141">log2 (LongMath)</a><br />
96
- <a href="classes/LongMath.html#M000142">log_internal (LongMath)</a><br />
97
- <a href="classes/LongMath.html#M000143">log_raw (LongMath)</a><br />
98
- <a href="classes/LongMath.html#M000122">merge_from_words (LongMath)</a><br />
99
- <a href="classes/LongDecimal.html#M000039">minus_one! (LongDecimal)</a><br />
100
- <a href="classes/LongDecimal.html#M000083">move_point_left (LongDecimal)</a><br />
101
- <a href="classes/LongDecimal.html#M000085">move_point_left_int (LongDecimal)</a><br />
102
- <a href="classes/LongDecimal.html#M000084">move_point_right (LongDecimal)</a><br />
103
- <a href="classes/LongDecimal.html#M000086">move_point_right_int (LongDecimal)</a><br />
104
- <a href="classes/LongMath.html#M000129">multiplicity_of_10 (LongMath)</a><br />
105
- <a href="classes/LongMath.html#M000128">multiplicity_of_factor (LongMath)</a><br />
106
- <a href="classes/LongDecimal.html#M000041">new (LongDecimal)</a><br />
67
+ <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 />
70
+ <a href="classes/LongDecimal.html#M000075">divmod (LongDecimal)</a><br />
71
+ <a href="classes/LongDecimalQuot.html#M000022">divmod (LongDecimalQuot)</a><br />
72
+ <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 />
79
+ <a href="classes/LongDecimal.html#M000102">hash (LongDecimal)</a><br />
80
+ <a href="classes/LongDecimalQuot.html#M000034">hash (LongDecimalQuot)</a><br />
81
+ <a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000151">hash (LongDecimalRoundingMode::RoundingModeClass)</a><br />
82
+ <a href="classes/LongDecimalBase.html#M000108">inc (LongDecimalBase)</a><br />
83
+ <a href="classes/LongDecimal.html#M000063">inc! (LongDecimal)</a><br />
84
+ <a href="classes/LongDecimalQuot.html#M000014">inc! (LongDecimalQuot)</a><br />
85
+ <a href="classes/LongDecimal.html#M000103">inspect (LongDecimal)</a><br />
86
+ <a href="classes/LongDecimalQuot.html#M000035">inspect (LongDecimalQuot)</a><br />
87
+ <a href="classes/LongMath.html#M000132">int_digits10 (LongMath)</a><br />
88
+ <a href="classes/LongDecimal.html#M000057">int_digits10 (LongDecimal)</a><br />
89
+ <a href="classes/LongDecimal.html#M000055">int_digits2 (LongDecimal)</a><br />
90
+ <a href="classes/LongDecimalBase.html#M000113">inverse (LongDecimalBase)</a><br />
91
+ <a href="classes/LongDecimal.html#M000094">is_int? (LongDecimal)</a><br />
92
+ <a href="classes/LongDecimalQuot.html#M000030">is_int? (LongDecimalQuot)</a><br />
93
+ <a href="classes/LongMath.html#M000141">log (LongMath)</a><br />
94
+ <a href="classes/LongMath.html#M000142">log10 (LongMath)</a><br />
95
+ <a href="classes/LongMath.html#M000143">log2 (LongMath)</a><br />
96
+ <a href="classes/LongMath.html#M000144">log_internal (LongMath)</a><br />
97
+ <a href="classes/LongMath.html#M000145">log_raw (LongMath)</a><br />
98
+ <a href="classes/LongMath.html#M000124">merge_from_words (LongMath)</a><br />
99
+ <a href="classes/LongDecimal.html#M000041">minus_one! (LongDecimal)</a><br />
100
+ <a href="classes/LongDecimal.html#M000085">move_point_left (LongDecimal)</a><br />
101
+ <a href="classes/LongDecimal.html#M000087">move_point_left_int (LongDecimal)</a><br />
102
+ <a href="classes/LongDecimal.html#M000086">move_point_right (LongDecimal)</a><br />
103
+ <a href="classes/LongDecimal.html#M000088">move_point_right_int (LongDecimal)</a><br />
104
+ <a href="classes/LongMath.html#M000131">multiplicity_of_10 (LongMath)</a><br />
105
+ <a href="classes/LongMath.html#M000130">multiplicity_of_factor (LongMath)</a><br />
107
106
  <a href="classes/LongDecimalQuot.html#M000004">new (LongDecimalQuot)</a><br />
108
- <a href="classes/LongDecimal.html#M000034">new! (LongDecimal)</a><br />
107
+ <a href="classes/LongDecimal.html#M000043">new (LongDecimal)</a><br />
108
+ <a href="classes/LongDecimal.html#M000036">new! (LongDecimal)</a><br />
109
109
  <a href="classes/LongDecimalQuot.html#M000003">new! (LongDecimalQuot)</a><br />
110
- <a href="classes/LongDecimal.html#M000059">next (LongDecimal)</a><br />
110
+ <a href="classes/LongDecimal.html#M000061">next (LongDecimal)</a><br />
111
111
  <a href="classes/LongDecimalQuot.html#M000005">numerator (LongDecimalQuot)</a><br />
112
- <a href="classes/LongDecimal.html#M000036">one! (LongDecimal)</a><br />
113
- <a href="classes/LongDecimal.html#M000099">one? (LongDecimal)</a><br />
114
- <a href="classes/LongDecimalQuot.html#M000027">one? (LongDecimalQuot)</a><br />
115
- <a href="classes/Numeric.html#M000103">one? (Numeric)</a><br />
116
- <a href="classes/LongMath.html#M000131">pi (LongMath)</a><br />
117
- <a href="classes/LongMath.html#M000145">power (LongMath)</a><br />
118
- <a href="classes/LongMath.html#M000146">power_internal (LongMath)</a><br />
119
- <a href="classes/LongDecimal.html#M000040">power_of_ten! (LongDecimal)</a><br />
120
- <a href="classes/LongDecimal.html#M000060">pred (LongDecimal)</a><br />
121
- <a href="classes/LongDecimal.html#M000070">rdiv (LongDecimal)</a><br />
122
- <a href="classes/LongDecimalBase.html#M000110">reciprocal (LongDecimalBase)</a><br />
123
- <a href="classes/LongDecimal.html#M000044">round_to_scale (LongDecimal)</a><br />
124
- <a href="classes/LongDecimalQuot.html#M000023">round_to_scale (LongDecimalQuot)</a><br />
125
- <a href="classes/LongDecimal.html#M000043">round_trailing_zeros (LongDecimal)</a><br />
126
- <a href="classes/LongDecimal.html#M000042">scale= (LongDecimal)</a><br />
127
- <a href="classes/LongDecimalBase.html#M000115">scale_equal (LongDecimalBase)</a><br />
128
- <a href="classes/LongDecimalBase.html#M000114">scale_ufo (LongDecimalBase)</a><br />
129
- <a href="classes/LongDecimal.html#M000093">sgn (LongDecimal)</a><br />
130
- <a href="classes/LongDecimalQuot.html#M000029">sgn (LongDecimalQuot)</a><br />
131
- <a href="classes/LongDecimal.html#M000095">sign (LongDecimal)</a><br />
132
- <a href="classes/LongDecimalQuot.html#M000031">sign (LongDecimalQuot)</a><br />
133
- <a href="classes/LongDecimal.html#M000094">signum (LongDecimal)</a><br />
134
- <a href="classes/LongDecimalQuot.html#M000030">signum (LongDecimalQuot)</a><br />
135
- <a href="classes/LongDecimal.html#M000054">sint_digits10 (LongDecimal)</a><br />
136
- <a href="classes/LongDecimal.html#M000082">size (LongDecimal)</a><br />
137
- <a href="classes/LongMath.html#M000121">split_to_words (LongMath)</a><br />
138
- <a href="classes/LongMath.html#M000137">sqrt (LongMath)</a><br />
139
- <a href="classes/LongDecimal.html#M000088">sqrt (LongDecimal)</a><br />
140
- <a href="classes/LongMath.html#M000138">sqrt_with_remainder (LongMath)</a><br />
141
- <a href="classes/LongDecimal.html#M000089">sqrt_with_remainder (LongDecimal)</a><br />
142
- <a href="classes/LongMath.html#M000123">sqrtb (LongMath)</a><br />
143
- <a href="classes/LongMath.html#M000124">sqrtb_with_remainder (LongMath)</a><br />
144
- <a href="classes/LongMath.html#M000125">sqrtw (LongMath)</a><br />
145
- <a href="classes/LongMath.html#M000126">sqrtw_with_remainder (LongMath)</a><br />
146
- <a href="classes/LongDecimalBase.html#M000109">square (LongDecimalBase)</a><br />
147
- <a href="classes/LongDecimal.html#M000087">square (LongDecimal)</a><br />
148
- <a href="classes/LongDecimal.html#M000058">succ (LongDecimal)</a><br />
149
- <a href="classes/LongDecimal.html#M000038">ten! (LongDecimal)</a><br />
150
- <a href="classes/LongDecimal.html#M000051">to_bd (LongDecimal)</a><br />
151
- <a href="classes/LongDecimalQuot.html#M000009">to_bd (LongDecimalQuot)</a><br />
152
- <a href="classes/LongDecimal.html#M000048">to_f (LongDecimal)</a><br />
153
- <a href="classes/LongDecimalQuot.html#M000008">to_f (LongDecimalQuot)</a><br />
154
- <a href="classes/LongDecimalQuot.html#M000010">to_i (LongDecimalQuot)</a><br />
155
- <a href="classes/LongDecimal.html#M000049">to_i (LongDecimal)</a><br />
156
- <a href="classes/LongDecimalQuot.html#M000011">to_ld (LongDecimalQuot)</a><br />
157
- <a href="classes/LongDecimal.html#M000050">to_ld (LongDecimal)</a><br />
158
- <a href="classes/Numeric.html#M000102">to_ld (Numeric)</a><br />
159
- <a href="classes/Rational.html#M000104">to_ld (Rational)</a><br />
160
- <a href="classes/LongDecimalBase.html#M000105">to_r (LongDecimalBase)</a><br />
161
- <a href="classes/LongDecimalQuot.html#M000007">to_s (LongDecimalQuot)</a><br />
162
- <a href="classes/LongDecimal.html#M000045">to_s (LongDecimal)</a><br />
163
- <a href="classes/LongDecimal.html#M000046">to_s_10 (LongDecimal)</a><br />
164
- <a href="classes/LongDecimal.html#M000047">to_s_internal (LongDecimal)</a><br />
165
- <a href="classes/LongDecimal.html#M000037">two! (LongDecimal)</a><br />
166
- <a href="classes/LongDecimal.html#M000063">unit (LongDecimal)</a><br />
167
- <a href="classes/LongDecimal.html#M000035">zero! (LongDecimal)</a><br />
168
- <a href="classes/LongDecimalQuot.html#M000026">zero? (LongDecimalQuot)</a><br />
169
- <a href="classes/LongDecimal.html#M000098">zero? (LongDecimal)</a><br />
170
- <a href="classes/LongDecimal.html#M000076">| (LongDecimal)</a><br />
171
- <a href="classes/LongDecimal.html#M000078">~ (LongDecimal)</a><br />
112
+ <a href="classes/LongDecimal.html#M000038">one! (LongDecimal)</a><br />
113
+ <a href="classes/LongDecimal.html#M000101">one? (LongDecimal)</a><br />
114
+ <a href="classes/LongDecimalQuot.html#M000029">one? (LongDecimalQuot)</a><br />
115
+ <a href="classes/Numeric.html#M000105">one? (Numeric)</a><br />
116
+ <a href="classes/LongMath.html#M000133">pi (LongMath)</a><br />
117
+ <a href="classes/LongMath.html#M000147">power (LongMath)</a><br />
118
+ <a href="classes/LongMath.html#M000148">power_internal (LongMath)</a><br />
119
+ <a href="classes/LongDecimal.html#M000042">power_of_ten! (LongDecimal)</a><br />
120
+ <a href="classes/LongDecimal.html#M000062">pred (LongDecimal)</a><br />
121
+ <a href="classes/LongDecimal.html#M000072">rdiv (LongDecimal)</a><br />
122
+ <a href="classes/LongDecimalBase.html#M000112">reciprocal (LongDecimalBase)</a><br />
123
+ <a href="classes/LongDecimal.html#M000046">round_to_scale (LongDecimal)</a><br />
124
+ <a href="classes/LongDecimalQuot.html#M000025">round_to_scale (LongDecimalQuot)</a><br />
125
+ <a href="classes/LongDecimal.html#M000045">round_trailing_zeros (LongDecimal)</a><br />
126
+ <a href="classes/LongDecimalQuot.html#M000007">scale= (LongDecimalQuot)</a><br />
127
+ <a href="classes/LongDecimal.html#M000044">scale= (LongDecimal)</a><br />
128
+ <a href="classes/LongDecimalBase.html#M000117">scale_equal (LongDecimalBase)</a><br />
129
+ <a href="classes/LongDecimalBase.html#M000116">scale_ufo (LongDecimalBase)</a><br />
130
+ <a href="classes/LongDecimal.html#M000095">sgn (LongDecimal)</a><br />
131
+ <a href="classes/LongDecimalQuot.html#M000031">sgn (LongDecimalQuot)</a><br />
132
+ <a href="classes/LongDecimal.html#M000097">sign (LongDecimal)</a><br />
133
+ <a href="classes/LongDecimalQuot.html#M000033">sign (LongDecimalQuot)</a><br />
134
+ <a href="classes/LongDecimalQuot.html#M000032">signum (LongDecimalQuot)</a><br />
135
+ <a href="classes/LongDecimal.html#M000096">signum (LongDecimal)</a><br />
136
+ <a href="classes/LongDecimalQuot.html#M000013">sint_digits10 (LongDecimalQuot)</a><br />
137
+ <a href="classes/LongDecimal.html#M000056">sint_digits10 (LongDecimal)</a><br />
138
+ <a href="classes/LongDecimal.html#M000084">size (LongDecimal)</a><br />
139
+ <a href="classes/LongMath.html#M000123">split_to_words (LongMath)</a><br />
140
+ <a href="classes/LongDecimal.html#M000090">sqrt (LongDecimal)</a><br />
141
+ <a href="classes/LongMath.html#M000139">sqrt (LongMath)</a><br />
142
+ <a href="classes/LongDecimal.html#M000091">sqrt_with_remainder (LongDecimal)</a><br />
143
+ <a href="classes/LongMath.html#M000140">sqrt_with_remainder (LongMath)</a><br />
144
+ <a href="classes/LongMath.html#M000125">sqrtb (LongMath)</a><br />
145
+ <a href="classes/LongMath.html#M000126">sqrtb_with_remainder (LongMath)</a><br />
146
+ <a href="classes/LongMath.html#M000127">sqrtw (LongMath)</a><br />
147
+ <a href="classes/LongMath.html#M000128">sqrtw_with_remainder (LongMath)</a><br />
148
+ <a href="classes/LongDecimalBase.html#M000111">square (LongDecimalBase)</a><br />
149
+ <a href="classes/LongDecimal.html#M000089">square (LongDecimal)</a><br />
150
+ <a href="classes/LongDecimal.html#M000060">succ (LongDecimal)</a><br />
151
+ <a href="classes/LongDecimal.html#M000040">ten! (LongDecimal)</a><br />
152
+ <a href="classes/LongDecimal.html#M000053">to_bd (LongDecimal)</a><br />
153
+ <a href="classes/LongDecimalQuot.html#M000010">to_bd (LongDecimalQuot)</a><br />
154
+ <a href="classes/LongDecimalQuot.html#M000009">to_f (LongDecimalQuot)</a><br />
155
+ <a href="classes/LongDecimal.html#M000050">to_f (LongDecimal)</a><br />
156
+ <a href="classes/LongDecimalQuot.html#M000011">to_i (LongDecimalQuot)</a><br />
157
+ <a href="classes/LongDecimal.html#M000051">to_i (LongDecimal)</a><br />
158
+ <a href="classes/Rational.html#M000106">to_ld (Rational)</a><br />
159
+ <a href="classes/Numeric.html#M000104">to_ld (Numeric)</a><br />
160
+ <a href="classes/LongDecimal.html#M000052">to_ld (LongDecimal)</a><br />
161
+ <a href="classes/LongDecimalQuot.html#M000012">to_ld (LongDecimalQuot)</a><br />
162
+ <a href="classes/LongDecimalBase.html#M000107">to_r (LongDecimalBase)</a><br />
163
+ <a href="classes/LongDecimalQuot.html#M000008">to_s (LongDecimalQuot)</a><br />
164
+ <a href="classes/LongDecimal.html#M000047">to_s (LongDecimal)</a><br />
165
+ <a href="classes/LongDecimal.html#M000048">to_s_10 (LongDecimal)</a><br />
166
+ <a href="classes/LongDecimal.html#M000049">to_s_internal (LongDecimal)</a><br />
167
+ <a href="classes/LongDecimal.html#M000039">two! (LongDecimal)</a><br />
168
+ <a href="classes/LongDecimal.html#M000065">unit (LongDecimal)</a><br />
169
+ <a href="classes/LongDecimal.html#M000037">zero! (LongDecimal)</a><br />
170
+ <a href="classes/LongDecimal.html#M000100">zero? (LongDecimal)</a><br />
171
+ <a href="classes/LongDecimalQuot.html#M000028">zero? (LongDecimalQuot)</a><br />
172
+ <a href="classes/LongDecimal.html#M000078">| (LongDecimal)</a><br />
173
+ <a href="classes/LongDecimal.html#M000080">~ (LongDecimal)</a><br />
172
174
  </div>
173
175
  </div>
174
176
  </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.24 2006/04/05 21:15:52 bk1 Exp $
5
- # CVS-Label: $Name: PRE_ALPHA_0_21 $
4
+ # CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/lib/long-decimal.rb,v 1.26 2006/04/07 22:26:08 bk1 Exp $
5
+ # CVS-Label: $Name: PRE_ALPHA_0_22 $
6
6
  # Author: $Author: bk1 $ (Karl Brodowsky)
7
7
  #
8
8
  require "complex"
@@ -61,7 +61,7 @@ end # LongDecimalRoundingMode
61
61
  # common base class for LongDecimal and LongDecimalQuot
62
62
  #
63
63
  class LongDecimalBase < Numeric
64
- @RCS_ID='-$Id: long-decimal.rb,v 1.24 2006/04/05 21:15:52 bk1 Exp $-'
64
+ @RCS_ID='-$Id: long-decimal.rb,v 1.26 2006/04/07 22:26:08 bk1 Exp $-'
65
65
 
66
66
  include LongDecimalRoundingMode
67
67
 
@@ -108,7 +108,12 @@ class LongDecimalBase < Numeric
108
108
  # calculate the multiplicative inverse
109
109
  #
110
110
  def reciprocal
111
- 1 / self
111
+ sx = self.scale
112
+ dx = self.sint_digits10
113
+ new_scale = [ 0, 2 * dx + sx - 2].max
114
+ result = 1 / self
115
+ result.scale = new_scale
116
+ result
112
117
  end
113
118
 
114
119
  alias inverse reciprocal
@@ -164,7 +169,7 @@ end # class LongDecimalBase
164
169
  # digits and the other one the position of the decimal point.
165
170
  #
166
171
  class LongDecimal < LongDecimalBase
167
- @RCS_ID='-$Id: long-decimal.rb,v 1.24 2006/04/05 21:15:52 bk1 Exp $-'
172
+ @RCS_ID='-$Id: long-decimal.rb,v 1.26 2006/04/07 22:26:08 bk1 Exp $-'
168
173
 
169
174
  # MINUS_ONE = LongDecimal(-1)
170
175
  # ZERO = LongDecimal(0)
@@ -1197,7 +1202,7 @@ end # LongDecimal
1197
1202
  #
1198
1203
  class LongDecimalQuot < LongDecimalBase
1199
1204
 
1200
- @RCS_ID='-$Id: long-decimal.rb,v 1.24 2006/04/05 21:15:52 bk1 Exp $-'
1205
+ @RCS_ID='-$Id: long-decimal.rb,v 1.26 2006/04/07 22:26:08 bk1 Exp $-'
1201
1206
 
1202
1207
  #
1203
1208
  # constructor
@@ -1217,6 +1222,7 @@ class LongDecimalQuot < LongDecimalBase
1217
1222
  # pair of LongDecimals
1218
1223
  #
1219
1224
  def initialize(first, second)
1225
+ @digits10 = nil
1220
1226
  if ((first.kind_of? Rational) || (first.kind_of? Integer)) && (second.kind_of? Integer) then
1221
1227
  @rat = Rational(first.numerator, first.denominator)
1222
1228
  @scale = second
@@ -1274,7 +1280,7 @@ class LongDecimalQuot < LongDecimalBase
1274
1280
  @scale = s
1275
1281
  end
1276
1282
 
1277
- private :scale=
1283
+ # protected :scale=
1278
1284
 
1279
1285
  #
1280
1286
  # conversion to string. Based on the conversion of Rational
@@ -1314,11 +1320,34 @@ class LongDecimalQuot < LongDecimalBase
1314
1320
  round_to_scale(prec, mode)
1315
1321
  end
1316
1322
 
1323
+ #
1324
+ # number of decimal digits before the decimal point, not counting a
1325
+ # single 0. negative value, if some zeros follow immediately after
1326
+ # decimal point
1327
+ #
1328
+ # 0.000x -> -3
1329
+ # 0.00x -> -2
1330
+ # 0.0xx -> -1
1331
+ # 0.xxx -> 0
1332
+ # 1.xxx -> 1
1333
+ # 10.xxx -> 2
1334
+ # 99.xxx -> 2
1335
+ # 100.xxx -> 3
1336
+ # ...
1337
+ #
1338
+ def sint_digits10
1339
+ if (@digits10.nil?)
1340
+ @digits10 = LongMath.int_digits10(numerator.abs / denominator)
1341
+ end
1342
+ @digits10
1343
+ end
1344
+
1317
1345
  #
1318
1346
  # self += 1
1319
1347
  #
1320
1348
  def inc!
1321
1349
  @rat += 1
1350
+ @digits10 = nil
1322
1351
  end
1323
1352
 
1324
1353
  #
@@ -1326,6 +1355,7 @@ class LongDecimalQuot < LongDecimalBase
1326
1355
  #
1327
1356
  def dec!
1328
1357
  @rat -= 1
1358
+ @digits10 = nil
1329
1359
  end
1330
1360
 
1331
1361
  #
@@ -1768,7 +1798,7 @@ module LongMath
1768
1798
  include Comparable
1769
1799
 
1770
1800
  #
1771
- # introduce some ordering for rounding modes
1801
+ # introduce some ordering for cache keys
1772
1802
  #
1773
1803
  def <=>(o)
1774
1804
  r = 0
@@ -1834,7 +1864,7 @@ module LongMath
1834
1864
  def LongMath.check_cacheable(x, s="x")
1835
1865
  raise TypeError, "#{s}=#{x} must be LongDecimal or Array of LongDecimal" unless (x.kind_of? LongDecimal) || (x.kind_of? Array) && (x[0].kind_of? LongDecimal)
1836
1866
  end
1837
-
1867
+
1838
1868
 
1839
1869
  #
1840
1870
  # store new value in cache, if it provides an improvement of
@@ -1843,10 +1873,9 @@ module LongMath
1843
1873
  def LongMath.set_cached(key, val)
1844
1874
  unless key.nil? || val.nil?
1845
1875
  oval = @@cache[key]
1846
- # puts("set key=#{key}\noval=#{oval}\nval=#{val}\n")
1847
1876
  unless (oval.nil?)
1848
- check_cacheable(val, "val")
1849
- check_cacheable(oval, "oval")
1877
+ check_cacheable(val, "val")
1878
+ check_cacheable(oval, "oval")
1850
1879
  if (val.scale <= oval.scale)
1851
1880
  return
1852
1881
  end
@@ -1988,7 +2017,6 @@ module LongMath
1988
2017
  end
1989
2018
 
1990
2019
  #
1991
-
1992
2020
  # calculate the square root of an integer using larger chunks of the
1993
2021
  # number. The optional parameter n provides the size of these
1994
2022
  # chunks. It is by default chosen to be 16, which is optimized for
@@ -2211,6 +2239,7 @@ module LongMath
2211
2239
  check_is_mode(final_mode, "final_mode")
2212
2240
  check_is_mode(mode, "mode")
2213
2241
 
2242
+ # calculate internal precision
2214
2243
  if (iprec.nil?)
2215
2244
  iprec = 5*(prec+1)
2216
2245
  end
@@ -2218,6 +2247,8 @@ module LongMath
2218
2247
  sprec = (iprec >> 1) + 1
2219
2248
  dprec = (prec+1) << 1
2220
2249
 
2250
+ # use caching so that pi is only calculated again if it has not
2251
+ # been done at least with the required precision
2221
2252
  cache_key = get_cache_key("pi", 0, mode, [0])
2222
2253
  curr_pi = get_cached(cache_key, 0, sprec)
2223
2254
  if curr_pi.nil? then
@@ -2259,7 +2290,6 @@ module LongMath
2259
2290
  # removed in future versions.
2260
2291
  #
2261
2292
  def LongMath.exp(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
2262
- # check_is_ld(x, "x")
2263
2293
  raise TypeError, "x=#{x.inspect} must not be greater #{MAX_EXP_ABLE}" unless x <= MAX_EXP_ABLE
2264
2294
  check_is_prec(prec, "prec")
2265
2295
  check_is_mode(mode, "mode")
@@ -2271,8 +2301,7 @@ module LongMath
2271
2301
  # LongDecimal. Only supports values of x such that the result still
2272
2302
  # fits into a float (x <= 709). This limitation is somewhat
2273
2303
  # arbitrary, but it is enforced in order to avoid producing numbers
2274
- # with the exponential function that exceed the memory. It may be
2275
- # removed in future versions.
2304
+ # with the exponential function that exceed the memory.
2276
2305
  #
2277
2306
  def LongMath.exp2(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
2278
2307
  LongMath.power(2, x, prec, mode)
@@ -2283,8 +2312,7 @@ module LongMath
2283
2312
  # LongDecimal. Only supports values of x such that the result still
2284
2313
  # fits into a float (x <= 709). This limitation is somewhat
2285
2314
  # arbitrary, but it is enforced in order to avoid producing numbers
2286
- # with the exponential function that exceed the memory. It may be
2287
- # removed in future versions.
2315
+ # with the exponential function that exceed the memory.
2288
2316
  #
2289
2317
  def LongMath.exp10(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
2290
2318
  LongMath.power(10, x, prec, mode)
@@ -2302,7 +2330,8 @@ module LongMath
2302
2330
  xf = x.to_f
2303
2331
  iprec_extra = (xf / LOG10).abs
2304
2332
  end
2305
- iprec = ((prec+10) * 1.20 + iprec_extra * 1.10).round
2333
+ iprec = ((prec+12) * 1.20 + iprec_extra * 1.10).round
2334
+ # iprec = ((prec+10) * 1.20 + iprec_extra * 1.10).round
2306
2335
  # iprec = ((prec+10)*1.20 + iprec_extra).round
2307
2336
  # iprec = ((prec+10)*1.20 + iprec_extra*1.20).round
2308
2337
  # puts("calc_iprec_for_exp: iprec=#{iprec} iprec_extra=#{iprec_extra}\n")
@@ -2469,7 +2498,7 @@ module LongMath
2469
2498
  if (y_arr.nil?) then
2470
2499
  y_arr = sqrt_raw(x, prec1, mode)
2471
2500
  def y_arr.scale
2472
- self[0].scale
2501
+ self[0].scale
2473
2502
  end
2474
2503
  set_cached(cache_key, y_arr) if cache_result
2475
2504
  end
@@ -2504,7 +2533,6 @@ module LongMath
2504
2533
  # LongDecimal.
2505
2534
  #
2506
2535
  def LongMath.log(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
2507
- # check_is_ld(x, "x")
2508
2536
  check_is_prec(prec, "prec")
2509
2537
  check_is_mode(mode, "mode")
2510
2538
  log_internal(x, prec, mode)
@@ -2539,7 +2567,7 @@ module LongMath
2539
2567
  # LongDecimal.
2540
2568
  #
2541
2569
  def LongMath.log2(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
2542
- # check_is_ld(x, "x")
2570
+
2543
2571
  check_is_prec(prec, "prec")
2544
2572
  check_is_mode(mode, "mode")
2545
2573
  iprec = prec + 2
@@ -2551,7 +2579,6 @@ module LongMath
2551
2579
  end
2552
2580
  id = x.int_digits2
2553
2581
  xx = (x / (1 << id)).round_to_scale(x.scale+id)
2554
- # puts("x=#{x} xx=#{xx} id=#{id} iprec=#{iprec}\n")
2555
2582
  lnxx = log_internal(xx, iprec, mode)
2556
2583
  ln2 = log_internal(2.to_ld, iprec, mode)
2557
2584
  y = id + (lnxx / ln2).round_to_scale(prec, mode)
@@ -2566,7 +2593,7 @@ module LongMath
2566
2593
  # not work correctly
2567
2594
  #
2568
2595
  def LongMath.log_internal(x, prec = nil, final_mode = LongDecimal::ROUND_HALF_DOWN, iprec = nil, mode = LongDecimal::ROUND_HALF_DOWN, cache_result = true)
2569
- # check_is_ld(x)
2596
+
2570
2597
  raise TypeError, "x=#{x.inspect} must not be positive" unless x > 0
2571
2598
  if (prec == nil) then
2572
2599
  if (x.kind_of? LongDecimalBase)
@@ -2621,7 +2648,7 @@ module LongMath
2621
2648
  # we have to rely on iprec being at least 10
2622
2649
  raise TypeError, "iprec=#{iprec} out of range" unless (iprec.kind_of? Fixnum) && iprec >= 10
2623
2650
 
2624
- # dprec = [ iprec - 1, (prec + 1) << 1 ].min
2651
+ # dprec = [ iprec - 1, (prec + 1) << 1 ].min
2625
2652
  # dprec >= 9
2626
2653
  dprec = iprec - 1
2627
2654
 
@@ -2638,20 +2665,6 @@ module LongMath
2638
2665
 
2639
2666
  # number that are beyond the usual range of Float need to be
2640
2667
  # handled specially to reduce to something expressable as Float
2641
- exp_part = 0
2642
- estimate = 0
2643
- # while (x > MAX_FLOATABLE) do
2644
- # if (exp_part == 0) then
2645
- # estimate = MAX_EXP_ABLE.to_i.to_ld
2646
- # exp_part = exp(estimate, iprec)
2647
- # end
2648
- # x = (x / exp_part).round_to_scale(iprec, mode)
2649
- # if (s < 0) then
2650
- # y -= estimate
2651
- # else
2652
- # y += estimate
2653
- # end
2654
- # end
2655
2668
  exp_keys = [ MAX_EXP_ABLE.to_i, 100, 10, 1 ]
2656
2669
  exp_keys.each do |exp_key|
2657
2670
  exp_val = exp(exp_key, iprec)
@@ -2664,35 +2677,6 @@ module LongMath
2664
2677
  end
2665
2678
  end
2666
2679
  end
2667
- # puts("log_raw divided t=#{Time.new-t0}")
2668
-
2669
- # # make sure x is close enough to 1 in order to ensure good
2670
- # # convergence of the Taylor-series
2671
- # s2 = s
2672
- # delta = LongDecimal(1, 3)
2673
- # while (x - 1).abs > delta do
2674
- # xf = x.to_f
2675
- # mlx = Math.log(xf)
2676
- # estimate = mlx.to_ld(20, LongDecimal::ROUND_DOWN)
2677
- # exp_part = exp(estimate, (1.01 * iprec).ceil)
2678
- # # exp_part = exp(estimate, iprec << 1)
2679
- # xq = (x / exp_part)
2680
- # if (xq < 1)
2681
- # xq = 1/xq
2682
- # s = -s
2683
- # end
2684
- # x = xq.round_to_scale(iprec, mode)
2685
- # if (x < 1)
2686
- # puts("x=#{x} < 1 est=#{estimate} part=#{exp_part} s=#{s} s2=#{s2}\n")
2687
- # end
2688
-
2689
- # # add/subtract to y what we have already found
2690
- # if (s2 < 0) then
2691
- # y -= estimate
2692
- # else
2693
- # y += estimate
2694
- # end
2695
- # end
2696
2680
 
2697
2681
  factor = 1
2698
2682
  sprec = (iprec * 1.5).round
@@ -2705,7 +2689,6 @@ module LongMath
2705
2689
  x = LongMath.sqrt(x, sprec, mode)
2706
2690
  factor *= 2
2707
2691
  end
2708
- # puts("log_raw rooted t=#{Time.new-t0}")
2709
2692
 
2710
2693
  sum = 0
2711
2694
  z = 1 - x
@@ -2719,10 +2702,8 @@ module LongMath
2719
2702
  sum += d
2720
2703
 
2721
2704
  end
2722
- # puts("log_raw summed t=#{Time.new-t0}")
2723
2705
 
2724
2706
  y -= ((s * factor) * sum).round_to_scale(iprec, mode)
2725
- # puts("log_raw done t=#{Time.new-t0}")
2726
2707
  return y
2727
2708
  end
2728
2709