long-decimal 0.01.01 → 0.01.02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. data/README +17 -94
  2. data/VERSION +1 -1
  3. data/doc/classes/Integer.html +239 -0
  4. data/doc/classes/Integer.src/M000036.html +18 -0
  5. data/doc/classes/Integer.src/M000039.html +145 -0
  6. data/doc/classes/LongDecimal.html +453 -399
  7. data/doc/classes/LongDecimal.src/M000040.html +4 -4
  8. data/doc/classes/LongDecimal.src/M000041.html +4 -4
  9. data/doc/classes/LongDecimal.src/M000042.html +4 -6
  10. data/doc/classes/LongDecimal.src/M000043.html +4 -106
  11. data/doc/classes/LongDecimal.src/M000044.html +4 -21
  12. data/doc/classes/LongDecimal.src/M000045.html +4 -11
  13. data/doc/classes/LongDecimal.src/M000046.html +6 -27
  14. data/doc/classes/LongDecimal.src/M000047.html +103 -16
  15. data/doc/classes/LongDecimal.src/M000048.html +21 -4
  16. data/doc/classes/LongDecimal.src/M000049.html +10 -14
  17. data/doc/classes/LongDecimal.src/M000050.html +22 -36
  18. data/doc/classes/LongDecimal.src/M000051.html +34 -4
  19. data/doc/classes/LongDecimal.src/M000052.html +17 -6
  20. data/doc/classes/LongDecimal.src/M000053.html +4 -6
  21. data/doc/classes/LongDecimal.src/M000054.html +15 -4
  22. data/doc/classes/LongDecimal.src/M000055.html +44 -12
  23. data/doc/classes/LongDecimal.src/M000056.html +4 -7
  24. data/doc/classes/LongDecimal.src/M000057.html +8 -4
  25. data/doc/classes/LongDecimal.src/M000058.html +6 -15
  26. data/doc/classes/LongDecimal.src/M000059.html +4 -13
  27. data/doc/classes/LongDecimal.src/M000060.html +15 -4
  28. data/doc/classes/LongDecimal.src/M000061.html +7 -5
  29. data/doc/classes/LongDecimal.src/M000062.html +4 -4
  30. data/doc/classes/LongDecimal.src/M000063.html +15 -5
  31. data/doc/classes/LongDecimal.src/M000064.html +13 -5
  32. data/doc/classes/LongDecimal.src/M000065.html +4 -4
  33. data/doc/classes/LongDecimal.src/M000067.html +4 -8
  34. data/doc/classes/LongDecimal.src/M000068.html +5 -9
  35. data/doc/classes/LongDecimal.src/M000069.html +5 -9
  36. data/doc/classes/LongDecimal.src/M000070.html +4 -9
  37. data/doc/classes/LongDecimal.src/M000071.html +4 -4
  38. data/doc/classes/LongDecimal.src/M000072.html +6 -17
  39. data/doc/classes/LongDecimal.src/M000073.html +7 -7
  40. data/doc/classes/LongDecimal.src/M000074.html +7 -7
  41. data/doc/classes/LongDecimal.src/M000075.html +7 -19
  42. data/doc/classes/LongDecimal.src/M000076.html +4 -8
  43. data/doc/classes/LongDecimal.src/M000077.html +19 -5
  44. data/doc/classes/LongDecimal.src/M000078.html +7 -7
  45. data/doc/classes/LongDecimal.src/M000079.html +7 -7
  46. data/doc/classes/LongDecimal.src/M000080.html +19 -7
  47. data/doc/classes/LongDecimal.src/M000081.html +8 -4
  48. data/doc/classes/LongDecimal.src/M000082.html +5 -7
  49. data/doc/classes/LongDecimal.src/M000083.html +8 -6
  50. data/doc/classes/LongDecimal.src/M000084.html +9 -4
  51. data/doc/classes/LongDecimal.src/M000085.html +9 -4
  52. data/doc/classes/LongDecimal.src/M000086.html +4 -9
  53. data/doc/classes/LongDecimal.src/M000087.html +6 -8
  54. data/doc/classes/LongDecimal.src/M000088.html +7 -5
  55. data/doc/classes/LongDecimal.src/M000089.html +4 -9
  56. data/doc/classes/LongDecimal.src/M000090.html +4 -4
  57. data/doc/classes/LongDecimal.src/M000091.html +9 -4
  58. data/doc/classes/LongDecimal.src/M000092.html +9 -4
  59. data/doc/classes/LongDecimal.src/M000093.html +5 -4
  60. data/doc/classes/LongDecimal.src/M000094.html +7 -57
  61. data/doc/classes/LongDecimal.src/M000095.html +4 -4
  62. data/doc/classes/LongDecimal.src/M000096.html +4 -4
  63. data/doc/classes/LongDecimal.src/M000097.html +4 -5
  64. data/doc/classes/LongDecimal.src/M000098.html +4 -5
  65. data/doc/classes/LongDecimal.src/M000099.html +59 -5
  66. data/doc/classes/LongDecimal.src/M000100.html +4 -5
  67. data/doc/classes/LongDecimal.src/M000101.html +4 -4
  68. data/doc/classes/LongDecimal.src/M000104.html +19 -0
  69. data/doc/classes/LongDecimal.src/M000105.html +19 -0
  70. data/doc/classes/LongDecimal.src/M000106.html +18 -0
  71. data/doc/classes/LongDecimal.src/M000107.html +18 -0
  72. data/doc/classes/LongDecimal.src/M000108.html +18 -0
  73. data/doc/classes/LongDecimal.src/M000109.html +18 -0
  74. data/doc/classes/LongDecimalBase.html +69 -66
  75. data/doc/classes/LongDecimalBase.src/M000113.html +4 -9
  76. data/doc/classes/LongDecimalBase.src/M000114.html +4 -5
  77. data/doc/classes/LongDecimalBase.src/M000115.html +4 -9
  78. data/doc/classes/LongDecimalBase.src/M000116.html +4 -9
  79. data/doc/classes/LongDecimalBase.src/M000117.html +4 -5
  80. data/doc/classes/LongDecimalBase.src/M000118.html +23 -0
  81. data/doc/classes/LongDecimalBase.src/M000121.html +23 -0
  82. data/doc/classes/LongDecimalBase.src/M000122.html +19 -0
  83. data/doc/classes/LongDecimalBase.src/M000123.html +18 -0
  84. data/doc/classes/LongDecimalQuot.html +33 -27
  85. data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
  86. data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
  87. data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
  88. data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
  89. data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
  90. data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
  91. data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
  92. data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
  93. data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
  94. data/doc/classes/LongDecimalQuot.src/M000012.html +1 -1
  95. data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
  96. data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
  97. data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
  98. data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
  99. data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
  100. data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
  101. data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
  102. data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
  103. data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
  104. data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
  105. data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
  106. data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
  107. data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
  108. data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
  109. data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
  110. data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
  111. data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
  112. data/doc/classes/LongDecimalQuot.src/M000030.html +1 -1
  113. data/doc/classes/LongDecimalQuot.src/M000031.html +1 -1
  114. data/doc/classes/LongDecimalQuot.src/M000034.html +1 -1
  115. data/doc/classes/LongDecimalQuot.src/M000035.html +1 -1
  116. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +25 -24
  117. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000156.html +22 -0
  118. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000157.html +18 -0
  119. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000158.html +18 -0
  120. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000159.html +18 -0
  121. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000161.html +25 -0
  122. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000162.html +18 -0
  123. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000163.html +18 -0
  124. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000164.html +18 -0
  125. data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.html +178 -0
  126. data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.src/M000165.html +25 -0
  127. data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.src/M000166.html +18 -0
  128. data/doc/classes/LongDecimalRoundingMode.html +41 -4
  129. data/doc/classes/LongMath/CacheKey.html +10 -10
  130. data/doc/classes/LongMath/CacheKey.src/M000155.html +36 -0
  131. data/doc/classes/LongMath/CacheKey.src/M000160.html +36 -0
  132. data/doc/classes/LongMath.html +246 -235
  133. data/doc/classes/LongMath.src/M000124.html +5 -18
  134. data/doc/classes/LongMath.src/M000125.html +4 -18
  135. data/doc/classes/LongMath.src/M000126.html +4 -5
  136. data/doc/classes/LongMath.src/M000127.html +5 -29
  137. data/doc/classes/LongMath.src/M000128.html +4 -5
  138. data/doc/classes/LongMath.src/M000129.html +14 -53
  139. data/doc/classes/LongMath.src/M000130.html +17 -20
  140. data/doc/classes/LongMath.src/M000131.html +5 -36
  141. data/doc/classes/LongMath.src/M000132.html +29 -6
  142. data/doc/classes/LongMath.src/M000133.html +5 -33
  143. data/doc/classes/LongMath.src/M000134.html +47 -41
  144. data/doc/classes/LongMath.src/M000135.html +21 -7
  145. data/doc/classes/LongMath.src/M000136.html +36 -4
  146. data/doc/classes/LongMath.src/M000137.html +6 -4
  147. data/doc/classes/LongMath.src/M000138.html +31 -70
  148. data/doc/classes/LongMath.src/M000139.html +45 -38
  149. data/doc/classes/LongMath.src/M000140.html +7 -4
  150. data/doc/classes/LongMath.src/M000141.html +4 -4
  151. data/doc/classes/LongMath.src/M000142.html +4 -6
  152. data/doc/classes/LongMath.src/M000143.html +67 -14
  153. data/doc/classes/LongMath.src/M000144.html +39 -14
  154. data/doc/classes/LongMath.src/M000145.html +4 -44
  155. data/doc/classes/LongMath.src/M000146.html +5 -339
  156. data/doc/classes/LongMath.src/M000147.html +6 -25
  157. data/doc/classes/LongMath.src/M000148.html +14 -75
  158. data/doc/classes/LongMath.src/M000149.html +33 -0
  159. data/doc/classes/LongMath.src/M000150.html +58 -0
  160. data/doc/classes/LongMath.src/M000151.html +406 -0
  161. data/doc/classes/LongMath.src/M000152.html +63 -0
  162. data/doc/classes/LongMath.src/M000153.html +117 -0
  163. data/doc/classes/LongMath.src/M000154.html +150 -0
  164. data/doc/classes/LongMath.src/M000155.html +63 -0
  165. data/doc/classes/LongMath.src/M000156.html +18 -0
  166. data/doc/classes/LongMath.src/M000157.html +19 -0
  167. data/doc/classes/LongMath.src/M000158.html +18 -0
  168. data/doc/classes/LongMath.src/M000159.html +19 -0
  169. data/doc/classes/Numeric.html +23 -21
  170. data/doc/classes/Numeric.src/M000106.html +18 -0
  171. data/doc/classes/Numeric.src/M000110.html +23 -0
  172. data/doc/classes/Numeric.src/M000111.html +18 -0
  173. data/doc/classes/Rational.html +18 -16
  174. data/doc/classes/Rational.src/M000107.html +23 -0
  175. data/doc/classes/Rational.src/M000112.html +23 -0
  176. data/doc/created.rid +1 -1
  177. data/doc/dot/f_0.dot +23 -1
  178. data/doc/dot/f_0.png +0 -0
  179. data/doc/dot/m_0_0.png +0 -0
  180. data/doc/dot/m_0_1.dot +13 -0
  181. data/doc/dot/m_0_1.png +0 -0
  182. data/doc/files/lib/long-decimal_rb.html +15 -13
  183. data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
  184. data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
  185. data/doc/fr_class_index.html +2 -0
  186. data/doc/fr_method_index.html +131 -124
  187. data/lib/long-decimal.rb +373 -49
  188. data/test/testlongdecimal.rb +689 -7
  189. data/test/testlongdeclib.rb +51 -11
  190. data/test/testrandlib.rb +23 -7
  191. data/test/testrandom.rb +4 -4
  192. data/test/testrandpower.rb +11 -9
  193. metadata +48 -3
@@ -5,25 +5,21 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>to_s_internal (LongDecimal)</title>
8
+ <title>round_trailing_zeros (LongDecimal)</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 525</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s_internal</span>(<span class="ruby-identifier">b</span>, <span class="ruby-identifier">sc</span>)
15
- <span class="ruby-identifier">sg</span> = <span class="ruby-identifier">sgn</span>
16
- <span class="ruby-identifier">i</span> = <span class="ruby-identifier">int_val</span>.<span class="ruby-identifier">abs</span>
17
- <span class="ruby-identifier">str</span> = <span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">b</span>)
18
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">then</span>
19
- <span class="ruby-identifier">missing</span> = <span class="ruby-identifier">sc</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
20
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">missing</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">then</span>
21
- <span class="ruby-identifier">str</span> = (<span class="ruby-value str">&quot;0&quot;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">missing</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">str</span>
22
- <span class="ruby-keyword kw">end</span>
23
- <span class="ruby-identifier">str</span>[<span class="ruby-operator">-</span><span class="ruby-identifier">sc</span>, <span class="ruby-value">0</span>] = <span class="ruby-value str">&quot;.&quot;</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 646</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">round_trailing_zeros</span>
15
+ <span class="ruby-identifier">n</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_10</span>(<span class="ruby-identifier">int_val</span>)
16
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">n</span>.<span class="ruby-identifier">zero?</span>) <span class="ruby-keyword kw">then</span>
17
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>
24
18
  <span class="ruby-keyword kw">end</span>
25
- <span class="ruby-identifier">str</span> = <span class="ruby-value str">&quot;-&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">str</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
26
- <span class="ruby-identifier">str</span>
19
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">n</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">scale</span>) <span class="ruby-keyword kw">then</span>
20
+ <span class="ruby-identifier">n</span> = <span class="ruby-identifier">scale</span>
21
+ <span class="ruby-keyword kw">end</span>
22
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">scale</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">n</span>)
27
23
  <span class="ruby-keyword kw">end</span></pre>
28
24
  </body>
29
25
  </html>
@@ -5,50 +5,36 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>to_f (LongDecimal)</title>
8
+ <title>round_to_scale (LongDecimal)</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 550</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_f</span>
15
- <span class="ruby-comment cmt"># handle overflow: raise exception</span>
16
- <span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
17
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;self=#{self.inspect} cannot be expressed as Float&quot;</span>
18
- <span class="ruby-keyword kw">end</span>
19
-
20
- <span class="ruby-comment cmt"># handle underflow: return 0.0</span>
21
- <span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MIN_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
22
- <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span><span class="ruby-value">.0</span>
23
- <span class="ruby-keyword kw">end</span>
24
-
25
- <span class="ruby-identifier">divisor</span> = <span class="ruby-identifier">denominator</span>
26
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">divisor</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">then</span>
27
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">to_f</span>
28
- <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span> <span class="ruby-keyword kw">then</span>
29
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">divisor</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
30
- <span class="ruby-identifier">q</span> = <span class="ruby-value">10</span><span class="ruby-operator">**</span>(<span class="ruby-identifier">scale</span> <span class="ruby-operator">-</span> <span class="ruby-constant">Float</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_10_EXP</span>)
31
- <span class="ruby-identifier">f</span> = (<span class="ruby-identifier">numerator</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">q</span>).<span class="ruby-identifier">to_f</span>
32
- <span class="ruby-identifier">d</span> = <span class="ruby-identifier">divisor</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">q</span>
33
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">d</span>
34
- <span class="ruby-keyword kw">else</span>
35
- <span class="ruby-identifier">f</span> = <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">to_f</span>
36
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">divisor</span>
37
- <span class="ruby-keyword kw">end</span>
38
- <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">divisor</span>
39
- <span class="ruby-comment cmt"># self is between -1 and 1</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 665</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">ROUND_UNNECESSARY</span>)
40
15
 
41
- <span class="ruby-comment cmt"># factor = numerator.abs.div(LongMath::MAX_FLOATABLE)</span>
42
- <span class="ruby-comment cmt"># digits = factor.to_ld.int_digits10</span>
43
- <span class="ruby-comment cmt"># return LongDecimal(numerator.div(10**digits), scale -digits).to_f</span>
44
- <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_f</span>
16
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;new_scale #{new_scale.inspect} must be integer&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">new_scale</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
17
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;new_scale #{new_scale.inspect} must be &gt;= 0&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">new_scale</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">0</span>
18
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;mode #{mode.inspect} must be legal rounding mode&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">mode</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">RoundingModeClass</span>
19
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scale</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">new_scale</span> <span class="ruby-keyword kw">then</span>
20
+ <span class="ruby-keyword kw">self</span>
45
21
  <span class="ruby-keyword kw">else</span>
46
- <span class="ruby-identifier">q</span> = <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">divisor</span>
47
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">q</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1000000000000000000000</span>)
48
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">to_f</span>
22
+ <span class="ruby-identifier">diff</span> = <span class="ruby-identifier">new_scale</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">scale</span>
23
+ <span class="ruby-identifier">factor</span> = <span class="ruby-value">10</span> <span class="ruby-operator">**</span> (<span class="ruby-identifier">diff</span>.<span class="ruby-identifier">abs</span>)
24
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">diff</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
25
+ <span class="ruby-comment cmt"># we become more precise, no rounding issues</span>
26
+ <span class="ruby-identifier">new_int_val</span> = <span class="ruby-identifier">int_val</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">factor</span>
49
27
  <span class="ruby-keyword kw">else</span>
50
- <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_f</span>
28
+ <span class="ruby-identifier">quot</span>, <span class="ruby-identifier">rem</span> = <span class="ruby-identifier">int_val</span>.<span class="ruby-identifier">divmod</span>(<span class="ruby-identifier">factor</span>)
29
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">rem</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
30
+ <span class="ruby-identifier">new_int_val</span> = <span class="ruby-identifier">quot</span>
31
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">ROUND_UNNECESSARY</span>) <span class="ruby-keyword kw">then</span>
32
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;mode ROUND_UNNECESSARY not applicable, remainder #{rem.to_s} is not zero&quot;</span>
33
+ <span class="ruby-keyword kw">else</span>
34
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimalQuot</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">mode</span>)
35
+ <span class="ruby-keyword kw">end</span>
51
36
  <span class="ruby-keyword kw">end</span>
37
+ <span class="ruby-constant">LongDecimal</span>(<span class="ruby-identifier">new_int_val</span>, <span class="ruby-identifier">new_scale</span>)
52
38
  <span class="ruby-keyword kw">end</span>
53
39
  <span class="ruby-keyword kw">end</span></pre>
54
40
  </body>
@@ -5,14 +5,44 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>to_i (LongDecimal)</title>
8
+ <title>round_to_allowed_remainders (LongDecimal)</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 597</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_i</span>
15
- <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">div</span>(<span class="ruby-identifier">denominator</span>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 712</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">round_to_allowed_remainders</span>(<span class="ruby-identifier">new_scale</span>,
15
+ <span class="ruby-identifier">remainders</span>,
16
+ <span class="ruby-identifier">modulus</span>,
17
+ <span class="ruby-identifier">rounding_mode</span> = <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_UNNECESSARY</span>,
18
+ <span class="ruby-identifier">zero_rounding_mode</span> = <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_UNNECESSARY</span>)
19
+
20
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;new_scale #{new_scale.inspect} must be integer&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">new_scale</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
21
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;new_scale #{new_scale.inspect} must be &gt;= 0&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">new_scale</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">0</span>
22
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">&quot;remainders must be Array&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Array</span>
23
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">&quot;remainders must be non-empty Array&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
24
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;modulus #{modulus.inspect} must be integer&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">modulus</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
25
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;modulus #{modulus.inspect} must be &gt;= 2&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">modulus</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">2</span>
26
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;rounding_mode #{rounding_mode.inspect} must be legal rounding rounding_mode&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rounding_mode</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">RoundingModeClass</span>
27
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">&quot;ROUND_HALF_EVEN is not applicable here&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_EVEN</span>
28
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;zero_rounding_mode #{zero_rounding_mode.inspect} must be legal zero_rounding zero_rounding_mode&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">zero_rounding_mode</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">ZeroRoundingModeClass</span>
29
+
30
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scale</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">new_scale</span> <span class="ruby-keyword kw">then</span>
31
+ <span class="ruby-identifier">expanded</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">rounding_mode</span>)
32
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">expanded</span>.<span class="ruby-identifier">round_to_allowed_remainders</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">remainders</span>, <span class="ruby-identifier">modulus</span>, <span class="ruby-identifier">rounding_mode</span>, <span class="ruby-identifier">zero_rounding_mode</span>)
33
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@scale</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">new_scale</span>
34
+ <span class="ruby-identifier">factor</span> = <span class="ruby-value">10</span><span class="ruby-operator">**</span>(<span class="ruby-ivar">@scale</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">new_scale</span>)
35
+ <span class="ruby-identifier">remainders</span> = <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
36
+ <span class="ruby-identifier">r</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">factor</span>
37
+ <span class="ruby-keyword kw">end</span>
38
+ <span class="ruby-identifier">modulus</span> <span class="ruby-operator">*=</span> <span class="ruby-identifier">factor</span>
39
+ <span class="ruby-keyword kw">end</span>
40
+
41
+ <span class="ruby-identifier">int_val_2</span> = <span class="ruby-ivar">@int_val</span>.<span class="ruby-identifier">round_to_allowed_remainders</span>(<span class="ruby-identifier">remainders</span>, <span class="ruby-identifier">modulus</span>, <span class="ruby-identifier">rounding_mode</span>, <span class="ruby-identifier">zero_rounding_mode</span>)
42
+ <span class="ruby-identifier">self_2</span> = <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">int_val_2</span>, <span class="ruby-ivar">@scale</span>)
43
+
44
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">self_2</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">rounding_mode</span>)
45
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">result</span>
16
46
  <span class="ruby-keyword kw">end</span></pre>
17
47
  </body>
18
48
  </html>
@@ -5,17 +5,28 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>to_ld (LongDecimal)</title>
8
+ <title>to_s (LongDecimal)</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 606</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-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-keyword kw">self</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 758</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">shown_scale</span> = <span class="ruby-ivar">@scale</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">ROUND_UNNECESSARY</span>, <span class="ruby-identifier">base</span> = <span class="ruby-value">10</span>)
15
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">base</span> <span class="ruby-operator">==</span> <span class="ruby-value">10</span>) <span class="ruby-keyword kw">then</span>
16
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">shown_scale</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@scale</span>)
17
+ <span class="ruby-identifier">to_s_10</span>
18
+ <span class="ruby-keyword kw">else</span>
19
+ <span class="ruby-identifier">s</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">shown_scale</span>, <span class="ruby-identifier">mode</span>)
20
+ <span class="ruby-identifier">s</span>.<span class="ruby-identifier">to_s_10</span>
21
+ <span class="ruby-keyword kw">end</span>
17
22
  <span class="ruby-keyword kw">else</span>
18
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
23
+ <span class="ruby-comment cmt"># base is not 10</span>
24
+ <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">base</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-value">2</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">base</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">base</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">36</span> <span class="ruby-keyword kw">then</span>
25
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">&quot;base must be integer between 2 and 36&quot;</span>
26
+ <span class="ruby-keyword kw">end</span>
27
+ <span class="ruby-identifier">quot</span> = (<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">move_point_right</span>(<span class="ruby-identifier">scale</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">base</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">shown_scale</span>) <span class="ruby-operator">/</span> <span class="ruby-value">10</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">scale</span>
28
+ <span class="ruby-identifier">rounded</span> = <span class="ruby-identifier">quot</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">mode</span>)
29
+ <span class="ruby-identifier">rounded</span>.<span class="ruby-identifier">to_s_internal</span>(<span class="ruby-identifier">base</span>, <span class="ruby-identifier">shown_scale</span>)
19
30
  <span class="ruby-keyword kw">end</span>
20
31
  <span class="ruby-keyword kw">end</span></pre>
21
32
  </body>
@@ -5,16 +5,14 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>to_bd (LongDecimal)</title>
8
+ <title>to_s_10 (LongDecimal)</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 617</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_bd</span>
15
- <span class="ruby-comment cmt"># this operation is probably not used so heavily, so we can live with a</span>
16
- <span class="ruby-comment cmt"># string as an intermediate step.</span>
17
- <span class="ruby-constant">BigDecimal</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 781</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s_10</span>
15
+ <span class="ruby-identifier">to_s_internal</span>(<span class="ruby-value">10</span>, <span class="ruby-identifier">scale</span>)
18
16
  <span class="ruby-keyword kw">end</span></pre>
19
17
  </body>
20
18
  </html>
@@ -5,14 +5,25 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>denominator (LongDecimal)</title>
8
+ <title>to_s_internal (LongDecimal)</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 631</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">denominator</span>
15
- <span class="ruby-value">10</span><span class="ruby-operator">**</span><span class="ruby-identifier">scale</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 788</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s_internal</span>(<span class="ruby-identifier">b</span>, <span class="ruby-identifier">sc</span>)
15
+ <span class="ruby-identifier">sg</span> = <span class="ruby-identifier">sgn</span>
16
+ <span class="ruby-identifier">i</span> = <span class="ruby-identifier">int_val</span>.<span class="ruby-identifier">abs</span>
17
+ <span class="ruby-identifier">str</span> = <span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">b</span>)
18
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">then</span>
19
+ <span class="ruby-identifier">missing</span> = <span class="ruby-identifier">sc</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
20
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">missing</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">then</span>
21
+ <span class="ruby-identifier">str</span> = (<span class="ruby-value str">&quot;0&quot;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">missing</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">str</span>
22
+ <span class="ruby-keyword kw">end</span>
23
+ <span class="ruby-identifier">str</span>[<span class="ruby-operator">-</span><span class="ruby-identifier">sc</span>, <span class="ruby-value">0</span>] = <span class="ruby-value str">&quot;.&quot;</span>
24
+ <span class="ruby-keyword kw">end</span>
25
+ <span class="ruby-identifier">str</span> = <span class="ruby-value str">&quot;-&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">str</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sg</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
26
+ <span class="ruby-identifier">str</span>
16
27
  <span class="ruby-keyword kw">end</span></pre>
17
28
  </body>
18
29
  </html>
@@ -5,25 +5,57 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>int_digits2 (LongDecimal)</title>
8
+ <title>to_f (LongDecimal)</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 653</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">int_digits2</span>
15
- <span class="ruby-identifier">int_part</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">abs</span>.<span class="ruby-identifier">to_i</span>
16
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">then</span>
17
- <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 813</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_f</span>
15
+ <span class="ruby-comment cmt"># handle overflow: raise exception</span>
16
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
17
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;self=#{self.inspect} cannot be expressed as Float&quot;</span>
18
18
  <span class="ruby-keyword kw">end</span>
19
19
 
20
- <span class="ruby-identifier">n</span> = <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">*</span> <span class="ruby-value">8</span> <span class="ruby-operator">-</span> <span class="ruby-value">31</span>
21
- <span class="ruby-identifier">int_part</span> = <span class="ruby-identifier">int_part</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-identifier">n</span>
22
- <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">do</span>
23
- <span class="ruby-identifier">int_part</span> = <span class="ruby-identifier">int_part</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">1</span>
24
- <span class="ruby-identifier">n</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
20
+ <span class="ruby-comment cmt"># handle underflow: return 0.0</span>
21
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MIN_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
22
+ <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span><span class="ruby-value">.0</span>
23
+ <span class="ruby-keyword kw">end</span>
24
+
25
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
26
+ <span class="ruby-keyword kw">return</span> <span class="ruby-operator">-</span>(<span class="ruby-operator">-</span><span class="ruby-keyword kw">self</span>).<span class="ruby-identifier">to_f</span>
27
+ <span class="ruby-keyword kw">end</span>
28
+
29
+ <span class="ruby-identifier">dividend</span> = <span class="ruby-identifier">numerator</span>
30
+ <span class="ruby-identifier">divisor</span> = <span class="ruby-identifier">denominator</span>
31
+
32
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">divisor</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">then</span>
33
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">to_f</span>
34
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span> <span class="ruby-keyword kw">then</span>
35
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">divisor</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
36
+ <span class="ruby-identifier">q</span> = <span class="ruby-value">10</span><span class="ruby-operator">**</span>(<span class="ruby-identifier">scale</span> <span class="ruby-operator">-</span> <span class="ruby-constant">Float</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_10_EXP</span>)
37
+ <span class="ruby-identifier">f</span> = (<span class="ruby-identifier">dividend</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">q</span>).<span class="ruby-identifier">to_f</span>
38
+ <span class="ruby-identifier">d</span> = <span class="ruby-identifier">divisor</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">q</span>
39
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">d</span>
40
+ <span class="ruby-keyword kw">else</span>
41
+ <span class="ruby-identifier">f</span> = <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">to_f</span>
42
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">divisor</span>
43
+ <span class="ruby-keyword kw">end</span>
44
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">divisor</span>
45
+ <span class="ruby-comment cmt"># self is between -1 and 1</span>
46
+
47
+ <span class="ruby-comment cmt"># factor = dividend.abs.div(LongMath::MAX_FLOATABLE)</span>
48
+ <span class="ruby-comment cmt"># digits = factor.to_ld.int_digits10</span>
49
+ <span class="ruby-comment cmt"># return LongDecimal(dividend.div(10**digits), scale -digits).to_f</span>
50
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_f</span>
51
+ <span class="ruby-keyword kw">else</span>
52
+ <span class="ruby-identifier">q</span> = <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">divisor</span>
53
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">q</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1000000000000000000000</span>)
54
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">to_f</span>
55
+ <span class="ruby-keyword kw">else</span>
56
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_f</span>
57
+ <span class="ruby-keyword kw">end</span>
25
58
  <span class="ruby-keyword kw">end</span>
26
- <span class="ruby-identifier">n</span>
27
59
  <span class="ruby-keyword kw">end</span></pre>
28
60
  </body>
29
61
  </html>
@@ -5,17 +5,14 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>sint_digits10 (LongDecimal)</title>
8
+ <title>to_i (LongDecimal)</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 683</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sint_digits10</span>
15
- <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@digits10</span>.<span class="ruby-identifier">nil?</span>)
16
- <span class="ruby-ivar">@digits10</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">int_digits10</span>(<span class="ruby-identifier">int_val</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">scale</span>
17
- <span class="ruby-keyword kw">end</span>
18
- <span class="ruby-ivar">@digits10</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 866</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_i</span>
15
+ <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">div</span>(<span class="ruby-identifier">denominator</span>)
19
16
  <span class="ruby-keyword kw">end</span></pre>
20
17
  </body>
21
18
  </html>
@@ -5,14 +5,18 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>int_digits10 (LongDecimal)</title>
8
+ <title>to_ld (LongDecimal)</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 699</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">int_digits10</span>
15
- <span class="ruby-keyword kw">return</span> [ <span class="ruby-identifier">sint_digits10</span>, <span class="ruby-value">0</span> ].<span class="ruby-identifier">max</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 875</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-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-keyword kw">self</span>
17
+ <span class="ruby-keyword kw">else</span>
18
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
19
+ <span class="ruby-keyword kw">end</span>
16
20
  <span class="ruby-keyword kw">end</span></pre>
17
21
  </body>
18
22
  </html>
@@ -5,25 +5,16 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>equalize_scale (LongDecimal)</title>
8
+ <title>to_bd (LongDecimal)</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 709</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">equalize_scale</span>(<span class="ruby-identifier">other</span>)
15
- <span class="ruby-identifier">o</span>, <span class="ruby-identifier">s</span> = <span class="ruby-identifier">coerce</span>(<span class="ruby-identifier">other</span>)
16
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">s</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>) <span class="ruby-keyword kw">then</span>
17
- <span class="ruby-comment cmt"># make sure Floats do not mess up our number of significant digits when adding</span>
18
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">other</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Float</span>) <span class="ruby-keyword kw">then</span>
19
- <span class="ruby-identifier">o</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">scale</span>, <span class="ruby-constant">ROUND_HALF_UP</span>)
20
- <span class="ruby-keyword kw">else</span>
21
- <span class="ruby-identifier">new_scale</span> = [<span class="ruby-identifier">s</span>.<span class="ruby-identifier">scale</span>, <span class="ruby-identifier">o</span>.<span class="ruby-identifier">scale</span>].<span class="ruby-identifier">max</span>
22
- <span class="ruby-identifier">s</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>)
23
- <span class="ruby-identifier">o</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>)
24
- <span class="ruby-keyword kw">end</span>
25
- <span class="ruby-keyword kw">end</span>
26
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s</span>, <span class="ruby-identifier">o</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 886</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_bd</span>
15
+ <span class="ruby-comment cmt"># this operation is probably not used so heavily, so we can live with a</span>
16
+ <span class="ruby-comment cmt"># string as an intermediate step.</span>
17
+ <span class="ruby-constant">BigDecimal</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>)
27
18
  <span class="ruby-keyword kw">end</span></pre>
28
19
  </body>
29
20
  </html>
@@ -5,23 +5,14 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>anti_equalize_scale (LongDecimal)</title>
8
+ <title>denominator (LongDecimal)</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 730</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">anti_equalize_scale</span>(<span class="ruby-identifier">other</span>)
15
- <span class="ruby-identifier">o</span>, <span class="ruby-identifier">s</span> = <span class="ruby-identifier">coerce</span>(<span class="ruby-identifier">other</span>)
16
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">s</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>) <span class="ruby-keyword kw">then</span>
17
- <span class="ruby-identifier">exponent</span> = [<span class="ruby-identifier">s</span>.<span class="ruby-identifier">scale</span>, <span class="ruby-identifier">o</span>.<span class="ruby-identifier">scale</span>].<span class="ruby-identifier">max</span>
18
- <span class="ruby-identifier">factor</span> = <span class="ruby-value">10</span><span class="ruby-operator">**</span><span class="ruby-identifier">exponent</span>
19
- <span class="ruby-identifier">s</span> <span class="ruby-operator">*=</span> <span class="ruby-identifier">factor</span>
20
- <span class="ruby-identifier">o</span> <span class="ruby-operator">*=</span> <span class="ruby-identifier">factor</span>
21
- <span class="ruby-identifier">s</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-value">0</span>)
22
- <span class="ruby-identifier">o</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-value">0</span>)
23
- <span class="ruby-keyword kw">end</span>
24
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s</span>, <span class="ruby-identifier">o</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 900</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">denominator</span>
15
+ <span class="ruby-value">10</span><span class="ruby-operator">**</span><span class="ruby-identifier">scale</span>
25
16
  <span class="ruby-keyword kw">end</span></pre>
26
17
  </body>
27
18
  </html>
@@ -5,14 +5,25 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>succ (LongDecimal)</title>
8
+ <title>int_digits2 (LongDecimal)</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 748</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">succ</span>
15
- <span class="ruby-constant">LongDecimal</span>(<span class="ruby-identifier">int_val</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-identifier">scale</span>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 922</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">int_digits2</span>
15
+ <span class="ruby-identifier">int_part</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">abs</span>.<span class="ruby-identifier">to_i</span>
16
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">then</span>
17
+ <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span>
18
+ <span class="ruby-keyword kw">end</span>
19
+
20
+ <span class="ruby-identifier">n</span> = <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">*</span> <span class="ruby-value">8</span> <span class="ruby-operator">-</span> <span class="ruby-value">31</span>
21
+ <span class="ruby-identifier">int_part</span> = <span class="ruby-identifier">int_part</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-identifier">n</span>
22
+ <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">do</span>
23
+ <span class="ruby-identifier">int_part</span> = <span class="ruby-identifier">int_part</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">1</span>
24
+ <span class="ruby-identifier">n</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
25
+ <span class="ruby-keyword kw">end</span>
26
+ <span class="ruby-identifier">n</span>
16
27
  <span class="ruby-keyword kw">end</span></pre>
17
28
  </body>
18
29
  </html>
@@ -5,15 +5,17 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>inc! (LongDecimal)</title>
8
+ <title>sint_digits10 (LongDecimal)</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 706</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">inc!</span>
15
- <span class="ruby-ivar">@int_val</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">denominator</span>
16
- <span class="ruby-ivar">@digits10</span> = <span class="ruby-keyword kw">nil</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 952</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sint_digits10</span>
15
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@digits10</span>.<span class="ruby-identifier">nil?</span>)
16
+ <span class="ruby-ivar">@digits10</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">int_digits10</span>(<span class="ruby-identifier">int_val</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">scale</span>
17
+ <span class="ruby-keyword kw">end</span>
18
+ <span class="ruby-ivar">@digits10</span>
17
19
  <span class="ruby-keyword kw">end</span></pre>
18
20
  </body>
19
21
  </html>