long-decimal 0.01.00 → 0.01.01

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. data/README +6 -3
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/doc/classes/LongDecimal.html +207 -189
  5. data/doc/classes/LongDecimal.src/M000036.html +1 -1
  6. data/doc/classes/LongDecimal.src/M000037.html +1 -1
  7. data/doc/classes/LongDecimal.src/M000038.html +1 -1
  8. data/doc/classes/LongDecimal.src/M000039.html +1 -1
  9. data/doc/classes/LongDecimal.src/M000040.html +1 -1
  10. data/doc/classes/LongDecimal.src/M000041.html +1 -1
  11. data/doc/classes/LongDecimal.src/M000042.html +1 -1
  12. data/doc/classes/LongDecimal.src/M000043.html +1 -1
  13. data/doc/classes/LongDecimal.src/M000044.html +1 -1
  14. data/doc/classes/LongDecimal.src/M000045.html +1 -1
  15. data/doc/classes/LongDecimal.src/M000046.html +1 -1
  16. data/doc/classes/LongDecimal.src/M000047.html +1 -1
  17. data/doc/classes/LongDecimal.src/M000048.html +1 -1
  18. data/doc/classes/LongDecimal.src/M000049.html +1 -1
  19. data/doc/classes/LongDecimal.src/M000050.html +15 -2
  20. data/doc/classes/LongDecimal.src/M000051.html +1 -1
  21. data/doc/classes/LongDecimal.src/M000052.html +2 -2
  22. data/doc/classes/LongDecimal.src/M000053.html +1 -1
  23. data/doc/classes/LongDecimal.src/M000054.html +1 -1
  24. data/doc/classes/LongDecimal.src/M000055.html +1 -1
  25. data/doc/classes/LongDecimal.src/M000056.html +1 -1
  26. data/doc/classes/LongDecimal.src/M000057.html +1 -1
  27. data/doc/classes/LongDecimal.src/M000058.html +1 -1
  28. data/doc/classes/LongDecimal.src/M000059.html +1 -1
  29. data/doc/classes/LongDecimal.src/M000060.html +1 -1
  30. data/doc/classes/LongDecimal.src/M000062.html +1 -1
  31. data/doc/classes/LongDecimal.src/M000063.html +1 -1
  32. data/doc/classes/LongDecimal.src/M000064.html +1 -1
  33. data/doc/classes/LongDecimal.src/M000065.html +1 -1
  34. data/doc/classes/LongDecimal.src/M000066.html +4 -8
  35. data/doc/classes/LongDecimal.src/M000067.html +6 -7
  36. data/doc/classes/LongDecimal.src/M000068.html +5 -5
  37. data/doc/classes/LongDecimal.src/M000069.html +6 -6
  38. data/doc/classes/LongDecimal.src/M000070.html +9 -4
  39. data/doc/classes/LongDecimal.src/M000071.html +4 -19
  40. data/doc/classes/LongDecimal.src/M000072.html +15 -5
  41. data/doc/classes/LongDecimal.src/M000073.html +7 -7
  42. data/doc/classes/LongDecimal.src/M000074.html +7 -18
  43. data/doc/classes/LongDecimal.src/M000075.html +20 -7
  44. data/doc/classes/LongDecimal.src/M000076.html +8 -5
  45. data/doc/classes/LongDecimal.src/M000077.html +5 -9
  46. data/doc/classes/LongDecimal.src/M000078.html +5 -5
  47. data/doc/classes/LongDecimal.src/M000079.html +5 -5
  48. data/doc/classes/LongDecimal.src/M000080.html +9 -4
  49. data/doc/classes/LongDecimal.src/M000081.html +4 -7
  50. data/doc/classes/LongDecimal.src/M000082.html +4 -4
  51. data/doc/classes/LongDecimal.src/M000083.html +7 -4
  52. data/doc/classes/LongDecimal.src/M000084.html +4 -4
  53. data/doc/classes/LongDecimal.src/M000085.html +4 -9
  54. data/doc/classes/LongDecimal.src/M000086.html +6 -6
  55. data/doc/classes/LongDecimal.src/M000087.html +9 -5
  56. data/doc/classes/LongDecimal.src/M000088.html +4 -8
  57. data/doc/classes/LongDecimal.src/M000089.html +9 -4
  58. data/doc/classes/LongDecimal.src/M000090.html +4 -4
  59. data/doc/classes/LongDecimal.src/M000091.html +4 -4
  60. data/doc/classes/LongDecimal.src/M000092.html +4 -4
  61. data/doc/classes/LongDecimal.src/M000093.html +4 -59
  62. data/doc/classes/LongDecimal.src/M000094.html +59 -4
  63. data/doc/classes/LongDecimal.src/M000095.html +4 -4
  64. data/doc/classes/LongDecimal.src/M000096.html +4 -5
  65. data/doc/classes/LongDecimal.src/M000099.html +5 -5
  66. data/doc/classes/LongDecimal.src/M000100.html +5 -4
  67. data/doc/classes/LongDecimal.src/M000101.html +4 -4
  68. data/doc/classes/LongDecimal.src/M000102.html +4 -4
  69. data/doc/classes/LongDecimal.src/M000103.html +4 -4
  70. data/doc/classes/LongDecimalBase.html +53 -53
  71. data/doc/classes/LongDecimalBase.src/M000108.html +4 -4
  72. data/doc/classes/LongDecimalBase.src/M000109.html +4 -4
  73. data/doc/classes/LongDecimalBase.src/M000110.html +4 -4
  74. data/doc/classes/LongDecimalBase.src/M000111.html +4 -4
  75. data/doc/classes/LongDecimalBase.src/M000112.html +4 -9
  76. data/doc/classes/LongDecimalBase.src/M000113.html +9 -9
  77. data/doc/classes/LongDecimalBase.src/M000116.html +9 -5
  78. data/doc/classes/LongDecimalBase.src/M000117.html +5 -4
  79. data/doc/classes/LongDecimalQuot.html +1 -1
  80. data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
  81. data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
  82. data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
  83. data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
  84. data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
  85. data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
  86. data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
  87. data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
  88. data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
  89. data/doc/classes/LongDecimalQuot.src/M000012.html +2 -2
  90. data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
  91. data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
  92. data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
  93. data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
  94. data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
  95. data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
  96. data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
  97. data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
  98. data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
  99. data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
  100. data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
  101. data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
  102. data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
  103. data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
  104. data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
  105. data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
  106. data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
  107. data/doc/classes/LongDecimalQuot.src/M000030.html +1 -1
  108. data/doc/classes/LongDecimalQuot.src/M000031.html +1 -1
  109. data/doc/classes/LongDecimalQuot.src/M000034.html +1 -1
  110. data/doc/classes/LongDecimalQuot.src/M000035.html +1 -1
  111. data/doc/classes/LongDecimalRoundingMode.html +6 -1
  112. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +37 -16
  113. data/doc/classes/LongMath.html +246 -161
  114. data/doc/classes/LongMath.src/M000119.html +5 -4
  115. data/doc/classes/LongMath.src/M000120.html +4 -4
  116. data/doc/classes/LongMath.src/M000121.html +4 -5
  117. data/doc/classes/LongMath.src/M000122.html +5 -4
  118. data/doc/classes/LongMath.src/M000123.html +4 -18
  119. data/doc/classes/LongMath.src/M000124.html +14 -14
  120. data/doc/classes/LongMath.src/M000125.html +18 -5
  121. data/doc/classes/LongMath.src/M000126.html +5 -29
  122. data/doc/classes/LongMath.src/M000127.html +29 -5
  123. data/doc/classes/LongMath.src/M000128.html +5 -57
  124. data/doc/classes/LongMath.src/M000129.html +55 -19
  125. data/doc/classes/LongMath.src/M000130.html +20 -35
  126. data/doc/classes/LongMath.src/M000131.html +36 -6
  127. data/doc/classes/LongMath.src/M000132.html +6 -33
  128. data/doc/classes/LongMath.src/M000133.html +26 -44
  129. data/doc/classes/LongMath.src/M000134.html +49 -5
  130. data/doc/classes/LongMath.src/M000135.html +7 -4
  131. data/doc/classes/LongMath.src/M000136.html +4 -4
  132. data/doc/classes/LongMath.src/M000137.html +4 -72
  133. data/doc/classes/LongMath.src/M000138.html +67 -39
  134. data/doc/classes/LongMath.src/M000139.html +44 -4
  135. data/doc/classes/LongMath.src/M000140.html +4 -4
  136. data/doc/classes/LongMath.src/M000141.html +4 -6
  137. data/doc/classes/LongMath.src/M000142.html +4 -18
  138. data/doc/classes/LongMath.src/M000143.html +8 -7
  139. data/doc/classes/LongMath.src/M000144.html +10 -35
  140. data/doc/classes/LongMath.src/M000145.html +23 -202
  141. data/doc/classes/LongMath.src/M000146.html +322 -4
  142. data/doc/classes/LongMath.src/M000147.html +22 -63
  143. data/doc/classes/LongMath.src/M000148.html +65 -33
  144. data/doc/classes/LongMath/CacheKey.html +5 -5
  145. data/doc/classes/Numeric.html +11 -11
  146. data/doc/classes/Numeric.src/M000105.html +9 -4
  147. data/doc/classes/Rational.html +6 -6
  148. data/doc/created.rid +1 -1
  149. data/doc/files/lib/long-decimal_rb.html +2 -2
  150. data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
  151. data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
  152. data/doc/fr_method_index.html +102 -95
  153. data/lib/long-decimal.rb +206 -49
  154. data/test/testlongdecimal.rb +736 -21
  155. data/test/testlongdeclib.rb +136 -25
  156. data/test/testrandlib.rb +87 -0
  157. data/test/testrandom.rb +30 -45
  158. data/test/testrandpower.rb +72 -0
  159. metadata +4 -2
@@ -5,16 +5,46 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>multiplicity_of_10 (LongMath)</title>
8
+ <title>multiplicity_of_factor (LongMath)</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 2222</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_10</span>(<span class="ruby-identifier">n</span>)
15
- <span class="ruby-identifier">mul_2</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_factor</span>(<span class="ruby-identifier">n</span>, <span class="ruby-value">2</span>)
16
- <span class="ruby-identifier">mul_5</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_factor</span>(<span class="ruby-identifier">n</span>, <span class="ruby-value">5</span>)
17
- [<span class="ruby-identifier">mul_2</span>, <span class="ruby-identifier">mul_5</span>].<span class="ruby-identifier">min</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2228</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_factor</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prime_number</span>)
15
+
16
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Rational</span>) <span class="ruby-operator">||</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalQuot</span>) <span class="ruby-keyword kw">then</span>
17
+ <span class="ruby-identifier">m1</span> = <span class="ruby-identifier">multiplicity_of_factor</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">numerator</span>, <span class="ruby-identifier">prime_number</span>)
18
+ <span class="ruby-identifier">m2</span> = <span class="ruby-identifier">multiplicity_of_factor</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">denominator</span>, <span class="ruby-identifier">prime_number</span>)
19
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">m1</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">m2</span>
20
+
21
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
22
+ <span class="ruby-identifier">m1</span> = <span class="ruby-identifier">multiplicity_of_factor</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">numerator</span>, <span class="ruby-identifier">prime_number</span>)
23
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">prime_number</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">prime_number</span> <span class="ruby-operator">==</span> <span class="ruby-value">5</span>) <span class="ruby-keyword kw">then</span>
24
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">m1</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span>
25
+ <span class="ruby-keyword kw">else</span>
26
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">m1</span>
27
+ <span class="ruby-keyword kw">end</span>
28
+
29
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>)
30
+
31
+ <span class="ruby-identifier">power</span> = <span class="ruby-identifier">gcd_with_high_power</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prime_number</span>)
32
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">power</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
33
+ <span class="ruby-identifier">result</span> = (<span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">power</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">prime_number</span>)).<span class="ruby-identifier">round</span>
34
+ <span class="ruby-keyword kw">else</span>
35
+ <span class="ruby-identifier">e</span> = (<span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">prime_number</span>)).<span class="ruby-identifier">floor</span>
36
+ <span class="ruby-identifier">result</span> = <span class="ruby-value">0</span>
37
+ <span class="ruby-identifier">partial</span> = <span class="ruby-identifier">prime_number</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">e</span>
38
+ <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">power</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">partial</span>) <span class="ruby-keyword kw">do</span>
39
+ <span class="ruby-identifier">power</span> <span class="ruby-operator">/=</span> <span class="ruby-identifier">partial</span>
40
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">e</span>
41
+ <span class="ruby-keyword kw">end</span>
42
+ <span class="ruby-identifier">result</span> <span class="ruby-operator">+=</span> (<span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">power</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">prime_number</span>)).<span class="ruby-identifier">round</span>
43
+ <span class="ruby-keyword kw">end</span>
44
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">result</span>
45
+ <span class="ruby-keyword kw">else</span>
46
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;type of x is not supported #{x.class} #{x.inpect}&quot;</span>
47
+ <span class="ruby-keyword kw">end</span>
18
48
  <span class="ruby-keyword kw">end</span></pre>
19
49
  </body>
20
50
  </html>
@@ -5,43 +5,16 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>int_digits10 (LongMath)</title>
8
+ <title>multiplicity_of_10 (LongMath)</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 2233</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">int_digits10</span>(<span class="ruby-identifier">n</span>)
15
-
16
- <span class="ruby-identifier">n</span> = <span class="ruby-identifier">n</span>.<span class="ruby-identifier">abs</span>
17
- <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>
18
- <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span>
19
- <span class="ruby-keyword kw">end</span>
20
-
21
- <span class="ruby-identifier">id</span> = <span class="ruby-value">1</span>
22
- <span class="ruby-identifier">powers</span> = []
23
- <span class="ruby-identifier">power</span> = <span class="ruby-value">10</span>
24
- <span class="ruby-identifier">idx</span> = <span class="ruby-value">0</span>
25
- <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">do</span>
26
- <span class="ruby-identifier">expon</span> = <span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">idx</span>
27
- <span class="ruby-identifier">powers</span>[<span class="ruby-identifier">idx</span>] = <span class="ruby-identifier">power</span>
28
- <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">power</span>
29
- <span class="ruby-identifier">id</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expon</span>
30
- <span class="ruby-identifier">n</span> = (<span class="ruby-identifier">n</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">power</span>).<span class="ruby-identifier">to_i</span>
31
- <span class="ruby-identifier">idx</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
32
- <span class="ruby-identifier">power</span> = <span class="ruby-identifier">power</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">power</span>
33
- <span class="ruby-keyword kw">end</span>
34
-
35
- <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">10</span> <span class="ruby-keyword kw">do</span>
36
- <span class="ruby-identifier">idx</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
37
- <span class="ruby-identifier">expon</span> = <span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">idx</span>
38
- <span class="ruby-identifier">power</span> = <span class="ruby-identifier">powers</span>[<span class="ruby-identifier">idx</span>]
39
- <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">power</span>
40
- <span class="ruby-identifier">id</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expon</span>
41
- <span class="ruby-identifier">n</span> = (<span class="ruby-identifier">n</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">power</span>).<span class="ruby-identifier">to_i</span>
42
- <span class="ruby-keyword kw">end</span>
43
- <span class="ruby-keyword kw">end</span>
44
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">id</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2267</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_10</span>(<span class="ruby-identifier">n</span>)
15
+ <span class="ruby-identifier">mul_2</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_factor</span>(<span class="ruby-identifier">n</span>, <span class="ruby-value">2</span>)
16
+ <span class="ruby-identifier">mul_5</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_factor</span>(<span class="ruby-identifier">n</span>, <span class="ruby-value">5</span>)
17
+ [<span class="ruby-identifier">mul_2</span>, <span class="ruby-identifier">mul_5</span>].<span class="ruby-identifier">min</span>
45
18
  <span class="ruby-keyword kw">end</span></pre>
46
19
  </body>
47
20
  </html>
@@ -5,61 +5,43 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>pi (LongMath)</title>
8
+ <title>int_digits10 (LongMath)</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 2284</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">pi</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_DOWN</span>, <span class="ruby-identifier">iprec</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">cache_result</span> = <span class="ruby-keyword kw">true</span>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2278</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">int_digits10</span>(<span class="ruby-identifier">n</span>)
15
15
 
16
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
17
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">mode</span>.<span class="ruby-identifier">nil?</span>)
18
- <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_DOWN</span>
16
+ <span class="ruby-identifier">n</span> = <span class="ruby-identifier">n</span>.<span class="ruby-identifier">abs</span>
17
+ <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>
18
+ <span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span>
19
19
  <span class="ruby-keyword kw">end</span>
20
- <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">final_mode</span>, <span class="ruby-value str">&quot;final_mode&quot;</span>)
21
- <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
22
20
 
23
- <span class="ruby-comment cmt"># calculate internal precision</span>
24
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">iprec</span>.<span class="ruby-identifier">nil?</span>)
25
- <span class="ruby-identifier">iprec</span> = <span class="ruby-value">5</span><span class="ruby-operator">*</span>(<span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)
21
+ <span class="ruby-identifier">id</span> = <span class="ruby-value">1</span>
22
+ <span class="ruby-identifier">powers</span> = []
23
+ <span class="ruby-identifier">power</span> = <span class="ruby-value">10</span>
24
+ <span class="ruby-identifier">idx</span> = <span class="ruby-value">0</span>
25
+ <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">do</span>
26
+ <span class="ruby-identifier">expon</span> = <span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">idx</span>
27
+ <span class="ruby-identifier">powers</span>[<span class="ruby-identifier">idx</span>] = <span class="ruby-identifier">power</span>
28
+ <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">power</span>
29
+ <span class="ruby-identifier">id</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expon</span>
30
+ <span class="ruby-identifier">n</span> = (<span class="ruby-identifier">n</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">power</span>).<span class="ruby-identifier">to_i</span>
31
+ <span class="ruby-identifier">idx</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
32
+ <span class="ruby-identifier">power</span> = <span class="ruby-identifier">power</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">power</span>
26
33
  <span class="ruby-keyword kw">end</span>
27
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-value str">&quot;iprec&quot;</span>)
28
- <span class="ruby-identifier">sprec</span> = (<span class="ruby-identifier">iprec</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">1</span>) <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
29
- <span class="ruby-identifier">dprec</span> = (<span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">1</span>
30
34
 
31
- <span class="ruby-comment cmt"># use caching so that pi is only calculated again if it has not</span>
32
- <span class="ruby-comment cmt"># been done at least with the required precision</span>
33
- <span class="ruby-identifier">cache_key</span> = <span class="ruby-identifier">get_cache_key</span>(<span class="ruby-value str">&quot;pi&quot;</span>, <span class="ruby-value">0</span>, <span class="ruby-identifier">mode</span>, [<span class="ruby-value">0</span>])
34
- <span class="ruby-identifier">curr_pi</span> = <span class="ruby-identifier">get_cached</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-value">0</span>, <span class="ruby-identifier">sprec</span>)
35
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">curr_pi</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">then</span>
36
-
37
- <span class="ruby-identifier">a</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)
38
- <span class="ruby-identifier">b</span> = (<span class="ruby-value">1</span> <span class="ruby-operator">/</span> <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">2</span>).<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">iprec</span>,<span class="ruby-identifier">mode</span>)).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
39
- <span class="ruby-identifier">c</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">5</span>,<span class="ruby-value">1</span>)
40
- <span class="ruby-identifier">k</span> = <span class="ruby-value">1</span>
41
- <span class="ruby-identifier">pow_k</span> = <span class="ruby-value">2</span>
42
-
43
- <span class="ruby-identifier">curr_pi</span> = <span class="ruby-value">0</span>
44
- <span class="ruby-identifier">last_pi</span> = <span class="ruby-value">0</span>
45
- <span class="ruby-identifier">last_diff</span> = <span class="ruby-value">1</span>
46
-
47
- <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
48
- <span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span> = ((<span class="ruby-identifier">a</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">b</span>) <span class="ruby-operator">/</span> <span class="ruby-value">2</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">sprec</span>, <span class="ruby-identifier">mode</span>), (<span class="ruby-identifier">a</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">b</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>).<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">sprec</span>, <span class="ruby-identifier">mode</span>)
49
- <span class="ruby-identifier">c</span> = (<span class="ruby-identifier">c</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">pow_k</span> <span class="ruby-operator">*</span> (<span class="ruby-identifier">a</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">b</span>)).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
50
- <span class="ruby-identifier">curr_pi</span> = (<span class="ruby-value">2</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">c</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">sprec</span>, <span class="ruby-identifier">mode</span>)
51
- <span class="ruby-identifier">diff</span> = (<span class="ruby-identifier">curr_pi</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">last_pi</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">dprec</span>, <span class="ruby-identifier">mode</span>).<span class="ruby-identifier">abs</span>
52
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">diff</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">last_diff</span>.<span class="ruby-identifier">zero?</span>) <span class="ruby-keyword kw">then</span>
53
- <span class="ruby-keyword kw">break</span>
54
- <span class="ruby-keyword kw">end</span>
55
- <span class="ruby-identifier">last_pi</span> = <span class="ruby-identifier">curr_pi</span>
56
- <span class="ruby-identifier">last_diff</span> = <span class="ruby-identifier">diff</span>
57
- <span class="ruby-identifier">k</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
58
- <span class="ruby-identifier">pow_k</span> = <span class="ruby-identifier">pow_k</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">1</span>
35
+ <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">10</span> <span class="ruby-keyword kw">do</span>
36
+ <span class="ruby-identifier">idx</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
37
+ <span class="ruby-identifier">expon</span> = <span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">idx</span>
38
+ <span class="ruby-identifier">power</span> = <span class="ruby-identifier">powers</span>[<span class="ruby-identifier">idx</span>]
39
+ <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">n</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">power</span>
40
+ <span class="ruby-identifier">id</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">expon</span>
41
+ <span class="ruby-identifier">n</span> = (<span class="ruby-identifier">n</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">power</span>).<span class="ruby-identifier">to_i</span>
59
42
  <span class="ruby-keyword kw">end</span>
60
- <span class="ruby-identifier">set_cached</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-identifier">curr_pi</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cache_result</span>
61
43
  <span class="ruby-keyword kw">end</span>
62
- <span class="ruby-identifier">curr_pi</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
44
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">id</span>
63
45
  <span class="ruby-keyword kw">end</span></pre>
64
46
  </body>
65
47
  </html>
@@ -5,17 +5,61 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>exp (LongMath)</title>
8
+ <title>pi (LongMath)</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 2343</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_DOWN</span>)
15
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;x=#{x.inspect} must not be greater #{MAX_EXP_ABLE}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-constant">MAX_EXP_ABLE</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2329</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">pi</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">standard_mode</span>, <span class="ruby-identifier">iprec</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">cache_result</span> = <span class="ruby-keyword kw">true</span>) <span class="ruby-comment cmt"># DOWN?</span>
15
+
16
16
  <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
17
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">mode</span>.<span class="ruby-identifier">nil?</span>)
18
+ <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">standard_mode</span>
19
+ <span class="ruby-keyword kw">end</span>
20
+ <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">final_mode</span>, <span class="ruby-value str">&quot;final_mode&quot;</span>)
17
21
  <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
18
- <span class="ruby-identifier">exp_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
22
+
23
+ <span class="ruby-comment cmt"># calculate internal precision</span>
24
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">iprec</span>.<span class="ruby-identifier">nil?</span>)
25
+ <span class="ruby-identifier">iprec</span> = <span class="ruby-value">5</span><span class="ruby-operator">*</span>(<span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>)
26
+ <span class="ruby-keyword kw">end</span>
27
+ <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-value str">&quot;iprec&quot;</span>)
28
+ <span class="ruby-identifier">sprec</span> = (<span class="ruby-identifier">iprec</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">1</span>) <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
29
+ <span class="ruby-identifier">dprec</span> = (<span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">1</span>
30
+
31
+ <span class="ruby-comment cmt"># use caching so that pi is only calculated again if it has not</span>
32
+ <span class="ruby-comment cmt"># been done at least with the required precision</span>
33
+ <span class="ruby-identifier">cache_key</span> = <span class="ruby-identifier">get_cache_key</span>(<span class="ruby-value str">&quot;pi&quot;</span>, <span class="ruby-value">0</span>, <span class="ruby-identifier">mode</span>, [<span class="ruby-value">0</span>])
34
+ <span class="ruby-identifier">curr_pi</span> = <span class="ruby-identifier">get_cached</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-value">0</span>, <span class="ruby-identifier">sprec</span>)
35
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">curr_pi</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">then</span>
36
+
37
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)
38
+ <span class="ruby-identifier">b</span> = (<span class="ruby-value">1</span> <span class="ruby-operator">/</span> <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">2</span>).<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">iprec</span>,<span class="ruby-identifier">mode</span>)).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
39
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">5</span>,<span class="ruby-value">1</span>)
40
+ <span class="ruby-identifier">k</span> = <span class="ruby-value">1</span>
41
+ <span class="ruby-identifier">pow_k</span> = <span class="ruby-value">2</span>
42
+
43
+ <span class="ruby-identifier">curr_pi</span> = <span class="ruby-value">0</span>
44
+ <span class="ruby-identifier">last_pi</span> = <span class="ruby-value">0</span>
45
+ <span class="ruby-identifier">last_diff</span> = <span class="ruby-value">1</span>
46
+
47
+ <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
48
+ <span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span> = ((<span class="ruby-identifier">a</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">b</span>) <span class="ruby-operator">/</span> <span class="ruby-value">2</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">sprec</span>, <span class="ruby-identifier">mode</span>), (<span class="ruby-identifier">a</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">b</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>).<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">sprec</span>, <span class="ruby-identifier">mode</span>)
49
+ <span class="ruby-identifier">c</span> = (<span class="ruby-identifier">c</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">pow_k</span> <span class="ruby-operator">*</span> (<span class="ruby-identifier">a</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">b</span>)).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
50
+ <span class="ruby-identifier">curr_pi</span> = (<span class="ruby-value">2</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">c</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">sprec</span>, <span class="ruby-identifier">mode</span>)
51
+ <span class="ruby-identifier">diff</span> = (<span class="ruby-identifier">curr_pi</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">last_pi</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">dprec</span>, <span class="ruby-identifier">mode</span>).<span class="ruby-identifier">abs</span>
52
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">diff</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">last_diff</span>.<span class="ruby-identifier">zero?</span>) <span class="ruby-keyword kw">then</span>
53
+ <span class="ruby-keyword kw">break</span>
54
+ <span class="ruby-keyword kw">end</span>
55
+ <span class="ruby-identifier">last_pi</span> = <span class="ruby-identifier">curr_pi</span>
56
+ <span class="ruby-identifier">last_diff</span> = <span class="ruby-identifier">diff</span>
57
+ <span class="ruby-identifier">k</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
58
+ <span class="ruby-identifier">pow_k</span> = <span class="ruby-identifier">pow_k</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">1</span>
59
+ <span class="ruby-keyword kw">end</span>
60
+ <span class="ruby-identifier">set_cached</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-identifier">curr_pi</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">cache_result</span>
61
+ <span class="ruby-keyword kw">end</span>
62
+ <span class="ruby-identifier">curr_pi</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
19
63
  <span class="ruby-keyword kw">end</span></pre>
20
64
  </body>
21
65
  </html>
@@ -5,14 +5,17 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>exp2 (LongMath)</title>
8
+ <title>exp (LongMath)</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 2357</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp2</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_DOWN</span>)
15
- <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power</span>(<span class="ruby-value">2</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2388</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">standard_mode</span>) <span class="ruby-comment cmt"># down?</span>
15
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;x=#{x.inspect} must not be greater #{MAX_EXP_ABLE}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-constant">MAX_EXP_ABLE</span>
16
+ <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
17
+ <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
18
+ <span class="ruby-identifier">exp_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
16
19
  <span class="ruby-keyword kw">end</span></pre>
17
20
  </body>
18
21
  </html>
@@ -5,14 +5,14 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>exp10 (LongMath)</title>
8
+ <title>exp2 (LongMath)</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 2368</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp10</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_DOWN</span>)
15
- <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power</span>(<span class="ruby-value">10</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2402</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp2</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">standard_mode</span>) <span class="ruby-comment cmt"># down?</span>
15
+ <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power</span>(<span class="ruby-value">2</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
16
16
  <span class="ruby-keyword kw">end</span></pre>
17
17
  </body>
18
18
  </html>
@@ -5,82 +5,14 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>exp_internal (LongMath)</title>
8
+ <title>exp10 (LongMath)</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 2408</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">final_mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_DOWN</span>, <span class="ruby-identifier">j</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">k</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">iprec</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_DOWN</span>, <span class="ruby-identifier">cache_result</span> = <span class="ruby-keyword kw">true</span>)
15
-
16
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">prec</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
17
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>)
18
- <span class="ruby-identifier">prec</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span>
19
- <span class="ruby-keyword kw">else</span>
20
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;precision must be supplied either as precision of x=#{x} or explicitely&quot;</span>
21
- <span class="ruby-keyword kw">end</span>
22
- <span class="ruby-keyword kw">end</span>
23
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
24
-
25
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">final_mode</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>)
26
- <span class="ruby-identifier">final_mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_DOWN</span>
27
- <span class="ruby-keyword kw">end</span>
28
- <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">final_mode</span>, <span class="ruby-value str">&quot;final_mode&quot;</span>)
29
- <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
30
-
31
- <span class="ruby-comment cmt"># if the result would come out to zero anyway, cut the work</span>
32
- <span class="ruby-identifier">xi</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_i</span>
33
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">xi</span> <span class="ruby-operator">&lt;</span> <span class="ruby-operator">-</span><span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-operator">||</span> <span class="ruby-operator">-</span>((<span class="ruby-identifier">xi</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">LOG10</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">10</span> <span class="ruby-keyword kw">then</span>
34
- <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">25</span>, <span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
35
- <span class="ruby-keyword kw">end</span>
36
- <span class="ruby-identifier">x_was_neg</span> = <span class="ruby-keyword kw">false</span>
37
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
38
- <span class="ruby-identifier">x</span> = <span class="ruby-operator">-</span><span class="ruby-identifier">x</span>
39
- <span class="ruby-identifier">x_was_neg</span> = <span class="ruby-keyword kw">true</span>
40
- <span class="ruby-keyword kw">end</span>
41
-
42
- <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">j</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">k</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">then</span>
43
- <span class="ruby-identifier">s1</span> = (<span class="ruby-identifier">prec</span> <span class="ruby-operator">*</span> <span class="ruby-constant">LOG10</span> <span class="ruby-operator">/</span> <span class="ruby-constant">LOG2</span>) <span class="ruby-operator">**</span> (<span class="ruby-value">1.0</span><span class="ruby-operator">/</span><span class="ruby-value">3.0</span>)
44
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">j</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
45
- <span class="ruby-identifier">j</span> = <span class="ruby-identifier">s1</span>.<span class="ruby-identifier">round</span>
46
- <span class="ruby-keyword kw">end</span>
47
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">k</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
48
- <span class="ruby-identifier">k</span> = (<span class="ruby-identifier">s1</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>([<span class="ruby-value">1</span>, <span class="ruby-identifier">prec</span>].<span class="ruby-identifier">max</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">LOG2</span>).<span class="ruby-identifier">round</span>
49
- <span class="ruby-keyword kw">end</span>
50
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">then</span>
51
- <span class="ruby-identifier">k</span> <span class="ruby-operator">+=</span> (<span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_f</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">LOG2</span>).<span class="ruby-identifier">abs</span>.<span class="ruby-identifier">round</span>
52
- <span class="ruby-keyword kw">end</span>
53
- <span class="ruby-keyword kw">end</span>
54
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">j</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
55
- <span class="ruby-identifier">j</span> = <span class="ruby-value">1</span>
56
- <span class="ruby-keyword kw">end</span>
57
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">k</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
58
- <span class="ruby-identifier">k</span> = <span class="ruby-value">0</span>
59
- <span class="ruby-keyword kw">end</span>
60
- <span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">j</span>, <span class="ruby-value str">&quot;j&quot;</span>)
61
- <span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">k</span>, <span class="ruby-value str">&quot;k&quot;</span>)
62
-
63
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">iprec</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
64
- <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">calc_iprec_for_exp</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">x_was_neg</span>)
65
- <span class="ruby-keyword kw">end</span>
66
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-value str">&quot;iprec&quot;</span>)
67
-
68
- <span class="ruby-comment cmt"># we only cache exp(1)</span>
69
- <span class="ruby-identifier">cache_key</span> = <span class="ruby-identifier">get_cache_key</span>(<span class="ruby-value str">&quot;exp&quot;</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">mode</span>, [<span class="ruby-value">1</span>, <span class="ruby-value">10</span>, <span class="ruby-value">100</span>, <span class="ruby-constant">MAX_EXP_ABLE</span>.<span class="ruby-identifier">to_i</span>])
70
- <span class="ruby-identifier">y_k</span> = <span class="ruby-identifier">get_cached</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">iprec</span>)
71
-
72
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">y_k</span>.<span class="ruby-identifier">nil?</span>) <span class="ruby-keyword kw">then</span>
73
- <span class="ruby-identifier">y_k</span> = <span class="ruby-identifier">exp_raw</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">j</span>, <span class="ruby-identifier">k</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
74
-
75
- <span class="ruby-comment cmt"># keep result around for exp(1)</span>
76
- <span class="ruby-identifier">set_cached</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-identifier">y_k</span>) <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">cache_result</span>)
77
- <span class="ruby-keyword kw">end</span>
78
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x_was_neg</span>)
79
- <span class="ruby-identifier">y_k</span> = <span class="ruby-identifier">y_k</span>.<span class="ruby-identifier">reciprocal</span>
80
- <span class="ruby-keyword kw">end</span>
81
- <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y_k</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
82
- <span class="ruby-identifier">y</span>
83
-
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2413</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp10</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">standard_mode</span>) <span class="ruby-comment cmt"># down?</span>
15
+ <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power</span>(<span class="ruby-value">10</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
84
16
  <span class="ruby-keyword kw">end</span></pre>
85
17
  </body>
86
18
  </html>
@@ -5,54 +5,82 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>exp_raw (LongMath)</title>
8
+ <title>exp_internal (LongMath)</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 2484</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp_raw</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">j</span>, <span class="ruby-identifier">k</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
15
- <span class="ruby-comment cmt"># dprec = [ (iprec*0.9).round , (prec + 1) &lt;&lt; 1 ].min</span>
16
- <span class="ruby-identifier">dprec</span> = [ (<span class="ruby-identifier">iprec</span><span class="ruby-operator">*</span><span class="ruby-value">0</span><span class="ruby-value">.9</span>).<span class="ruby-identifier">round</span>, <span class="ruby-identifier">prec</span> ].<span class="ruby-identifier">max</span>
17
- <span class="ruby-comment cmt"># puts(&quot;prec=#{prec} dprec=#{dprec} iprec=#{iprec}&quot;)</span>
18
-
19
- <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
20
- <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
21
- <span class="ruby-keyword kw">end</span>
22
-
23
- <span class="ruby-identifier">x_k</span> = (<span class="ruby-identifier">x</span> <span class="ruby-operator">/</span> (<span class="ruby-value">1</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">k</span>)).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
24
- <span class="ruby-identifier">x_j</span> = (<span class="ruby-identifier">x_k</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">j</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
25
- <span class="ruby-identifier">s</span> = [ <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">0</span>) ] <span class="ruby-operator">*</span> <span class="ruby-identifier">j</span>
26
- <span class="ruby-identifier">t</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)
27
- <span class="ruby-identifier">last_t</span> = <span class="ruby-value">1</span>
28
- <span class="ruby-identifier">f</span> = <span class="ruby-value">0</span>
29
- <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
30
- <span class="ruby-identifier">j</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
31
- <span class="ruby-identifier">s</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">t</span>
32
- <span class="ruby-identifier">f</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
33
- <span class="ruby-identifier">t</span> = (<span class="ruby-identifier">t</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">f</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2453</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">exp_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">final_mode</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">standard_mode</span>, <span class="ruby-identifier">j</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">k</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">iprec</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_imode</span>, <span class="ruby-identifier">cache_result</span> = <span class="ruby-keyword kw">true</span>) <span class="ruby-comment cmt"># down?</span>
15
+
16
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">prec</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
17
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>)
18
+ <span class="ruby-identifier">prec</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span>
19
+ <span class="ruby-keyword kw">else</span>
20
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;precision must be supplied either as precision of x=#{x} or explicitely&quot;</span>
21
+ <span class="ruby-keyword kw">end</span>
22
+ <span class="ruby-keyword kw">end</span>
23
+ <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
24
+
25
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">final_mode</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>)
26
+ <span class="ruby-identifier">final_mode</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">standard_mode</span>
27
+ <span class="ruby-keyword kw">end</span>
28
+ <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">final_mode</span>, <span class="ruby-value str">&quot;final_mode&quot;</span>)
29
+ <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
30
+
31
+ <span class="ruby-comment cmt"># if the result would come out to zero anyway, cut the work</span>
32
+ <span class="ruby-identifier">xi</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_i</span>
33
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">xi</span> <span class="ruby-operator">&lt;</span> <span class="ruby-operator">-</span><span class="ruby-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-operator">||</span> <span class="ruby-operator">-</span>((<span class="ruby-identifier">xi</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">LOG10</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">10</span> <span class="ruby-keyword kw">then</span>
34
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">25</span>, <span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
35
+ <span class="ruby-keyword kw">end</span>
36
+ <span class="ruby-identifier">x_was_neg</span> = <span class="ruby-keyword kw">false</span>
37
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
38
+ <span class="ruby-identifier">x</span> = <span class="ruby-operator">-</span><span class="ruby-identifier">x</span>
39
+ <span class="ruby-identifier">x_was_neg</span> = <span class="ruby-keyword kw">true</span>
40
+ <span class="ruby-keyword kw">end</span>
41
+
42
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">j</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">k</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">then</span>
43
+ <span class="ruby-identifier">s1</span> = (<span class="ruby-identifier">prec</span> <span class="ruby-operator">*</span> <span class="ruby-constant">LOG10</span> <span class="ruby-operator">/</span> <span class="ruby-constant">LOG2</span>) <span class="ruby-operator">**</span> (<span class="ruby-value">1.0</span><span class="ruby-operator">/</span><span class="ruby-value">3.0</span>)
44
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">j</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
45
+ <span class="ruby-identifier">j</span> = <span class="ruby-identifier">s1</span>.<span class="ruby-identifier">round</span>
34
46
  <span class="ruby-keyword kw">end</span>
35
- <span class="ruby-identifier">t</span> = (<span class="ruby-identifier">t</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">x_j</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
36
- <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">t</span>.<span class="ruby-identifier">zero?</span>)
37
- <span class="ruby-identifier">tr</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">dprec</span>, <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_DOWN</span>).<span class="ruby-identifier">abs</span>
38
- <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">t</span>.<span class="ruby-identifier">zero?</span>)
39
- <span class="ruby-identifier">tu</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">unit</span>
40
- <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">tr</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">tu</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">last_t</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-identifier">tu</span>)
41
- <span class="ruby-identifier">last_t</span> = <span class="ruby-identifier">tr</span>
42
- <span class="ruby-keyword kw">end</span>
43
- <span class="ruby-identifier">x_i</span> = <span class="ruby-value">1</span>
44
- <span class="ruby-identifier">y_k</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">0</span>)
45
- <span class="ruby-identifier">j</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
46
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">i</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
47
- <span class="ruby-identifier">x_i</span> = (<span class="ruby-identifier">x_i</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">x_k</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
47
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">k</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
48
+ <span class="ruby-identifier">k</span> = (<span class="ruby-identifier">s1</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>([<span class="ruby-value">1</span>, <span class="ruby-identifier">prec</span>].<span class="ruby-identifier">max</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">LOG2</span>).<span class="ruby-identifier">round</span>
48
49
  <span class="ruby-keyword kw">end</span>
49
- <span class="ruby-identifier">y_k</span> <span class="ruby-operator">+=</span> (<span class="ruby-identifier">s</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">*</span> <span class="ruby-identifier">x_i</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
50
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">then</span>
51
+ <span class="ruby-identifier">k</span> <span class="ruby-operator">+=</span> (<span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_f</span>) <span class="ruby-operator">/</span> <span class="ruby-constant">LOG2</span>).<span class="ruby-identifier">abs</span>.<span class="ruby-identifier">round</span>
52
+ <span class="ruby-keyword kw">end</span>
53
+ <span class="ruby-keyword kw">end</span>
54
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">j</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
55
+ <span class="ruby-identifier">j</span> = <span class="ruby-value">1</span>
56
+ <span class="ruby-keyword kw">end</span>
57
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">k</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
58
+ <span class="ruby-identifier">k</span> = <span class="ruby-value">0</span>
59
+ <span class="ruby-keyword kw">end</span>
60
+ <span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">j</span>, <span class="ruby-value str">&quot;j&quot;</span>)
61
+ <span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">k</span>, <span class="ruby-value str">&quot;k&quot;</span>)
62
+
63
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">iprec</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
64
+ <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">calc_iprec_for_exp</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">x_was_neg</span>)
65
+ <span class="ruby-keyword kw">end</span>
66
+ <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-value str">&quot;iprec&quot;</span>)
67
+
68
+ <span class="ruby-comment cmt"># we only cache exp(1)</span>
69
+ <span class="ruby-identifier">cache_key</span> = <span class="ruby-identifier">get_cache_key</span>(<span class="ruby-value str">&quot;exp&quot;</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">mode</span>, [<span class="ruby-value">1</span>, <span class="ruby-value">10</span>, <span class="ruby-value">100</span>, <span class="ruby-constant">MAX_EXP_ABLE</span>.<span class="ruby-identifier">to_i</span>])
70
+ <span class="ruby-identifier">y_k</span> = <span class="ruby-identifier">get_cached</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-identifier">x</span>, <span class="ruby-identifier">iprec</span>)
71
+
72
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">y_k</span>.<span class="ruby-identifier">nil?</span>) <span class="ruby-keyword kw">then</span>
73
+ <span class="ruby-identifier">y_k</span> = <span class="ruby-identifier">exp_raw</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">j</span>, <span class="ruby-identifier">k</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
74
+
75
+ <span class="ruby-comment cmt"># keep result around for exp(1)</span>
76
+ <span class="ruby-identifier">set_cached</span>(<span class="ruby-identifier">cache_key</span>, <span class="ruby-identifier">y_k</span>) <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">cache_result</span>)
50
77
  <span class="ruby-keyword kw">end</span>
51
- <span class="ruby-identifier">k</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
52
- <span class="ruby-identifier">y_k</span> = <span class="ruby-identifier">y_k</span>.<span class="ruby-identifier">square</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
78
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x_was_neg</span>)
79
+ <span class="ruby-identifier">y_k</span> = <span class="ruby-identifier">y_k</span>.<span class="ruby-identifier">reciprocal</span>
53
80
  <span class="ruby-keyword kw">end</span>
81
+ <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y_k</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
82
+ <span class="ruby-identifier">y</span>
54
83
 
55
- <span class="ruby-identifier">y_k</span>
56
84
  <span class="ruby-keyword kw">end</span></pre>
57
85
  </body>
58
86
  </html>