long-decimal 0.00.16 → 0.00.17

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 (143) hide show
  1. data/README +16 -15
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/doc/classes/LongDecimal.html +15 -8
  5. data/doc/classes/LongDecimal.src/M000041.html +3 -2
  6. data/doc/classes/LongDecimal.src/M000042.html +1 -1
  7. data/doc/classes/LongDecimal.src/M000043.html +1 -1
  8. data/doc/classes/LongDecimal.src/M000044.html +1 -3
  9. data/doc/classes/LongDecimal.src/M000045.html +1 -1
  10. data/doc/classes/LongDecimal.src/M000046.html +1 -1
  11. data/doc/classes/LongDecimal.src/M000047.html +1 -1
  12. data/doc/classes/LongDecimal.src/M000048.html +1 -1
  13. data/doc/classes/LongDecimal.src/M000049.html +7 -3
  14. data/doc/classes/LongDecimal.src/M000050.html +1 -1
  15. data/doc/classes/LongDecimal.src/M000051.html +1 -1
  16. data/doc/classes/LongDecimal.src/M000052.html +1 -1
  17. data/doc/classes/LongDecimal.src/M000053.html +1 -1
  18. data/doc/classes/LongDecimal.src/M000054.html +1 -1
  19. data/doc/classes/LongDecimal.src/M000055.html +1 -1
  20. data/doc/classes/LongDecimal.src/M000056.html +1 -1
  21. data/doc/classes/LongDecimal.src/M000058.html +1 -1
  22. data/doc/classes/LongDecimal.src/M000059.html +1 -1
  23. data/doc/classes/LongDecimal.src/M000060.html +1 -1
  24. data/doc/classes/LongDecimal.src/M000061.html +1 -1
  25. data/doc/classes/LongDecimal.src/M000062.html +1 -1
  26. data/doc/classes/LongDecimal.src/M000063.html +1 -1
  27. data/doc/classes/LongDecimal.src/M000064.html +1 -1
  28. data/doc/classes/LongDecimal.src/M000065.html +1 -1
  29. data/doc/classes/LongDecimal.src/M000066.html +1 -1
  30. data/doc/classes/LongDecimal.src/M000067.html +1 -1
  31. data/doc/classes/LongDecimal.src/M000068.html +1 -1
  32. data/doc/classes/LongDecimal.src/M000069.html +1 -1
  33. data/doc/classes/LongDecimal.src/M000070.html +1 -1
  34. data/doc/classes/LongDecimal.src/M000071.html +1 -1
  35. data/doc/classes/LongDecimal.src/M000072.html +1 -1
  36. data/doc/classes/LongDecimal.src/M000073.html +1 -1
  37. data/doc/classes/LongDecimal.src/M000074.html +1 -1
  38. data/doc/classes/LongDecimal.src/M000075.html +1 -1
  39. data/doc/classes/LongDecimal.src/M000076.html +1 -1
  40. data/doc/classes/LongDecimal.src/M000077.html +1 -1
  41. data/doc/classes/LongDecimal.src/M000078.html +1 -1
  42. data/doc/classes/LongDecimal.src/M000079.html +1 -1
  43. data/doc/classes/LongDecimal.src/M000080.html +1 -1
  44. data/doc/classes/LongDecimal.src/M000081.html +1 -1
  45. data/doc/classes/LongDecimal.src/M000082.html +1 -1
  46. data/doc/classes/LongDecimal.src/M000083.html +1 -1
  47. data/doc/classes/LongDecimal.src/M000084.html +1 -1
  48. data/doc/classes/LongDecimal.src/M000085.html +1 -1
  49. data/doc/classes/LongDecimal.src/M000086.html +1 -1
  50. data/doc/classes/LongDecimal.src/M000087.html +1 -1
  51. data/doc/classes/LongDecimal.src/M000088.html +1 -1
  52. data/doc/classes/LongDecimal.src/M000089.html +30 -4
  53. data/doc/classes/LongDecimal.src/M000090.html +1 -1
  54. data/doc/classes/LongDecimal.src/M000091.html +1 -1
  55. data/doc/classes/LongDecimal.src/M000094.html +1 -1
  56. data/doc/classes/LongDecimal.src/M000095.html +1 -1
  57. data/doc/classes/LongDecimal.src/M000096.html +1 -1
  58. data/doc/classes/LongDecimal.src/M000097.html +1 -1
  59. data/doc/classes/LongDecimal.src/M000098.html +1 -1
  60. data/doc/classes/LongDecimal.src/M000099.html +1 -1
  61. data/doc/classes/LongDecimalBase.html +58 -57
  62. data/doc/classes/LongDecimalBase.src/M000102.html +4 -4
  63. data/doc/classes/LongDecimalBase.src/M000103.html +4 -4
  64. data/doc/classes/LongDecimalBase.src/M000104.html +4 -4
  65. data/doc/classes/LongDecimalBase.src/M000105.html +4 -4
  66. data/doc/classes/LongDecimalBase.src/M000106.html +4 -4
  67. data/doc/classes/LongDecimalBase.src/M000107.html +18 -0
  68. data/doc/classes/LongDecimalBase.src/M000110.html +9 -5
  69. data/doc/classes/LongDecimalBase.src/M000111.html +5 -4
  70. data/doc/classes/LongDecimalBase.src/M000112.html +18 -0
  71. data/doc/classes/LongDecimalQuot.html +18 -13
  72. data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
  73. data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
  74. data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
  75. data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
  76. data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
  77. data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
  78. data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
  79. data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
  80. data/doc/classes/LongDecimalQuot.src/M000011.html +3 -3
  81. data/doc/classes/LongDecimalQuot.src/M000012.html +1 -1
  82. data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
  83. data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
  84. data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
  85. data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
  86. data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
  87. data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
  88. data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
  89. data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
  90. data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
  91. data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
  92. data/doc/classes/LongDecimalQuot.src/M000023.html +35 -2
  93. data/doc/classes/LongDecimalQuot.src/M000024.html +20 -4
  94. data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
  95. data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
  96. data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
  97. data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
  98. data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
  99. data/doc/classes/LongDecimalQuot.src/M000032.html +1 -1
  100. data/doc/classes/LongDecimalQuot.src/M000033.html +1 -1
  101. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +5 -5
  102. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000137.html +22 -0
  103. data/doc/classes/LongMath.html +135 -116
  104. data/doc/classes/LongMath.src/M000113.html +5 -4
  105. data/doc/classes/LongMath.src/M000114.html +4 -4
  106. data/doc/classes/LongMath.src/M000115.html +4 -5
  107. data/doc/classes/LongMath.src/M000116.html +5 -4
  108. data/doc/classes/LongMath.src/M000117.html +4 -18
  109. data/doc/classes/LongMath.src/M000118.html +14 -14
  110. data/doc/classes/LongMath.src/M000119.html +18 -5
  111. data/doc/classes/LongMath.src/M000120.html +5 -29
  112. data/doc/classes/LongMath.src/M000121.html +29 -5
  113. data/doc/classes/LongMath.src/M000122.html +5 -56
  114. data/doc/classes/LongMath.src/M000123.html +54 -19
  115. data/doc/classes/LongMath.src/M000124.html +20 -35
  116. data/doc/classes/LongMath.src/M000125.html +31 -27
  117. data/doc/classes/LongMath.src/M000126.html +32 -8
  118. data/doc/classes/LongMath.src/M000127.html +8 -13
  119. data/doc/classes/LongMath.src/M000128.html +13 -82
  120. data/doc/classes/LongMath.src/M000129.html +79 -4
  121. data/doc/classes/LongMath.src/M000130.html +4 -14
  122. data/doc/classes/LongMath.src/M000131.html +4 -14
  123. data/doc/classes/LongMath.src/M000132.html +13 -148
  124. data/doc/classes/LongMath.src/M000133.html +14 -8
  125. data/doc/classes/LongMath.src/M000134.html +127 -3
  126. data/doc/classes/LongMath.src/M000135.html +25 -0
  127. data/doc/classes/LongMath.src/M000136.html +42 -0
  128. data/doc/classes/Numeric.html +5 -2
  129. data/doc/classes/Numeric.src/M000100.html +8 -3
  130. data/doc/classes/Rational.html +158 -0
  131. data/doc/classes/Rational.src/M000101.html +23 -0
  132. data/doc/created.rid +1 -1
  133. data/doc/dot/f_0.dot +9 -0
  134. data/doc/dot/f_0.png +0 -0
  135. data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
  136. data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
  137. data/doc/fr_class_index.html +1 -0
  138. data/doc/fr_method_index.html +56 -54
  139. data/lib/long-decimal.rb +147 -29
  140. data/test/testlongdecimal.rb +58 -5
  141. data/version.rb +1 -1
  142. metadata +10 -3
  143. data/doc/files/lib/long-decimal_rb.html +0 -187
@@ -5,42 +5,46 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>calc_pi (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 1914</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">calc_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>)
15
- <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">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>)
17
- <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>
18
- <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>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1975</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>)
19
15
 
20
- <span class="ruby-identifier">a</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)
21
- <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>)
22
- <span class="ruby-identifier">c</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">5</span>,<span class="ruby-value">1</span>)
23
- <span class="ruby-identifier">k</span> = <span class="ruby-value">1</span>
24
- <span class="ruby-identifier">pow_k</span> = <span class="ruby-value">2</span>
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>
25
20
 
26
- <span class="ruby-identifier">pi</span> = <span class="ruby-value">0</span>
27
- <span class="ruby-identifier">last_pi</span> = <span class="ruby-value">0</span>
28
- <span class="ruby-identifier">last_diff</span> = <span class="ruby-value">1</span>
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>)
29
30
 
30
- <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
31
- <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>)
32
- <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>)
33
- <span class="ruby-identifier">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>)
34
- <span class="ruby-identifier">diff</span> = (<span class="ruby-identifier">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>
35
- <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>
36
- <span class="ruby-keyword kw">break</span>
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>
37
43
  <span class="ruby-keyword kw">end</span>
38
- <span class="ruby-identifier">last_pi</span> = <span class="ruby-identifier">pi</span>
39
- <span class="ruby-identifier">last_diff</span> = <span class="ruby-identifier">diff</span>
40
- <span class="ruby-identifier">k</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
41
- <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>
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>
42
47
  <span class="ruby-keyword kw">end</span>
43
- <span class="ruby-identifier">pi</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
44
48
  <span class="ruby-keyword kw">end</span></pre>
45
49
  </body>
46
50
  </html>
@@ -5,18 +5,42 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>exp (LongMath)</title>
8
+ <title>calc_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 1954</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">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
16
- <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>
17
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
18
- <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
19
- <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>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2022</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">calc_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>)
15
+ <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">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>)
17
+ <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>
18
+ <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>
19
+
20
+ <span class="ruby-identifier">a</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)
21
+ <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>)
22
+ <span class="ruby-identifier">c</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">5</span>,<span class="ruby-value">1</span>)
23
+ <span class="ruby-identifier">k</span> = <span class="ruby-value">1</span>
24
+ <span class="ruby-identifier">pow_k</span> = <span class="ruby-value">2</span>
25
+
26
+ <span class="ruby-identifier">pi</span> = <span class="ruby-value">0</span>
27
+ <span class="ruby-identifier">last_pi</span> = <span class="ruby-value">0</span>
28
+ <span class="ruby-identifier">last_diff</span> = <span class="ruby-value">1</span>
29
+
30
+ <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
31
+ <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>)
32
+ <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>)
33
+ <span class="ruby-identifier">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>)
34
+ <span class="ruby-identifier">diff</span> = (<span class="ruby-identifier">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>
35
+ <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>
36
+ <span class="ruby-keyword kw">break</span>
37
+ <span class="ruby-keyword kw">end</span>
38
+ <span class="ruby-identifier">last_pi</span> = <span class="ruby-identifier">pi</span>
39
+ <span class="ruby-identifier">last_diff</span> = <span class="ruby-identifier">diff</span>
40
+ <span class="ruby-identifier">k</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
41
+ <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>
42
+ <span class="ruby-keyword kw">end</span>
43
+ <span class="ruby-identifier">pi</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
20
44
  <span class="ruby-keyword kw">end</span></pre>
21
45
  </body>
22
46
  </html>
@@ -5,23 +5,18 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>calc_iprec_for_exp (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 1966</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">calc_iprec_for_exp</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>)
15
- <span class="ruby-identifier">iprec_extra</span> = <span class="ruby-value">0</span>
16
- <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>
17
- <span class="ruby-identifier">xf</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_f</span>
18
- <span class="ruby-identifier">iprec_extra</span> = (<span class="ruby-identifier">xf</span> <span class="ruby-operator">/</span> <span class="ruby-constant">LOG10</span>).<span class="ruby-identifier">abs</span>
19
- <span class="ruby-keyword kw">end</span>
20
- <span class="ruby-identifier">iprec</span> = ((<span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">10</span>)<span class="ruby-operator">*</span><span class="ruby-value">1.20</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">iprec_extra</span>).<span class="ruby-identifier">round</span>
21
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">iprec</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">prec</span>) <span class="ruby-keyword kw">then</span>
22
- <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span>
23
- <span class="ruby-keyword kw">end</span>
24
- <span class="ruby-identifier">iprec</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2062</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">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
16
+ <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>
17
+ <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
18
+ <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
19
+ <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>)
25
20
  <span class="ruby-keyword kw">end</span></pre>
26
21
  </body>
27
22
  </html>
@@ -5,92 +5,23 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>exp_internal (LongMath)</title>
8
+ <title>calc_iprec_for_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 1988</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>)
15
- <span class="ruby-identifier">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
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-identifier">prec</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span>
18
- <span class="ruby-keyword kw">end</span>
19
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
20
-
21
- <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>)
22
- <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>
23
- <span class="ruby-keyword kw">end</span>
24
- <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>)
25
- <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
26
-
27
- <span class="ruby-comment cmt"># if the result would come out to zero anyway, cut the work</span>
28
- <span class="ruby-identifier">xi</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_i</span>
29
- <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">1</span> <span class="ruby-keyword kw">then</span>
30
- <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>)
31
- <span class="ruby-keyword kw">end</span>
32
-
33
- <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>
34
- <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>)
35
- <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>
36
- <span class="ruby-identifier">j</span> = <span class="ruby-identifier">s1</span>.<span class="ruby-identifier">round</span>
37
- <span class="ruby-keyword kw">end</span>
38
- <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>
39
- <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>
40
- <span class="ruby-keyword kw">end</span>
41
- <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>
42
- <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>
43
- <span class="ruby-keyword kw">end</span>
44
- <span class="ruby-keyword kw">end</span>
45
- <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>
46
- <span class="ruby-identifier">j</span> = <span class="ruby-value">1</span>
47
- <span class="ruby-keyword kw">end</span>
48
- <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>
49
- <span class="ruby-identifier">k</span> = <span class="ruby-value">0</span>
50
- <span class="ruby-keyword kw">end</span>
51
- <span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">j</span>, <span class="ruby-value str">&quot;j&quot;</span>)
52
- <span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">k</span>, <span class="ruby-value str">&quot;k&quot;</span>)
53
-
54
- <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>
55
- <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>)
56
- <span class="ruby-keyword kw">end</span>
57
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-value str">&quot;iprec&quot;</span>)
58
-
59
- <span class="ruby-identifier">dprec</span> = [ <span class="ruby-identifier">iprec</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> ].<span class="ruby-identifier">min</span>
60
-
61
- <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>)
62
- <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>)
63
- <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>
64
- <span class="ruby-identifier">t</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)
65
- <span class="ruby-identifier">last_t</span> = <span class="ruby-value">1</span>
66
- <span class="ruby-identifier">f</span> = <span class="ruby-value">0</span>
67
- <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
68
- <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>
69
- <span class="ruby-identifier">s</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">t</span>
70
- <span class="ruby-identifier">f</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
71
- <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>)
72
- <span class="ruby-keyword kw">end</span>
73
- <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>)
74
- <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>)
75
- <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>
76
- <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>)
77
- <span class="ruby-identifier">tu</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">unit</span>
78
- <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>)
79
- <span class="ruby-identifier">last_t</span> = <span class="ruby-identifier">tr</span>
80
- <span class="ruby-keyword kw">end</span>
81
- <span class="ruby-identifier">x_i</span> = <span class="ruby-value">1</span>
82
- <span class="ruby-identifier">y_k</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">0</span>)
83
- <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>
84
- <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>
85
- <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>)
86
- <span class="ruby-keyword kw">end</span>
87
- <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>)
88
- <span class="ruby-keyword kw">end</span>
89
- <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>
90
- <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>)
91
- <span class="ruby-keyword kw">end</span>
92
- <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>)
93
- <span class="ruby-identifier">y</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2074</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">calc_iprec_for_exp</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>)
15
+ <span class="ruby-identifier">iprec_extra</span> = <span class="ruby-value">0</span>
16
+ <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>
17
+ <span class="ruby-identifier">xf</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_f</span>
18
+ <span class="ruby-identifier">iprec_extra</span> = (<span class="ruby-identifier">xf</span> <span class="ruby-operator">/</span> <span class="ruby-constant">LOG10</span>).<span class="ruby-identifier">abs</span>
19
+ <span class="ruby-keyword kw">end</span>
20
+ <span class="ruby-identifier">iprec</span> = ((<span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">10</span>)<span class="ruby-operator">*</span><span class="ruby-value">1.20</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">iprec_extra</span>).<span class="ruby-identifier">round</span>
21
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">iprec</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">prec</span>) <span class="ruby-keyword kw">then</span>
22
+ <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span>
23
+ <span class="ruby-keyword kw">end</span>
24
+ <span class="ruby-identifier">iprec</span>
94
25
  <span class="ruby-keyword kw">end</span></pre>
95
26
  </body>
96
27
  </html>
@@ -5,17 +5,92 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>log (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 2074</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">log</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>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2096</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>)
15
15
  <span class="ruby-identifier">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
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-identifier">prec</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span>
18
+ <span class="ruby-keyword kw">end</span>
16
19
  <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
20
+
21
+ <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>)
22
+ <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>
23
+ <span class="ruby-keyword kw">end</span>
24
+ <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
25
  <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">log_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
26
+
27
+ <span class="ruby-comment cmt"># if the result would come out to zero anyway, cut the work</span>
28
+ <span class="ruby-identifier">xi</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_i</span>
29
+ <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">1</span> <span class="ruby-keyword kw">then</span>
30
+ <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>)
31
+ <span class="ruby-keyword kw">end</span>
32
+
33
+ <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>
34
+ <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>)
35
+ <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>
36
+ <span class="ruby-identifier">j</span> = <span class="ruby-identifier">s1</span>.<span class="ruby-identifier">round</span>
37
+ <span class="ruby-keyword kw">end</span>
38
+ <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>
39
+ <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>
40
+ <span class="ruby-keyword kw">end</span>
41
+ <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>
42
+ <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>
43
+ <span class="ruby-keyword kw">end</span>
44
+ <span class="ruby-keyword kw">end</span>
45
+ <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>
46
+ <span class="ruby-identifier">j</span> = <span class="ruby-value">1</span>
47
+ <span class="ruby-keyword kw">end</span>
48
+ <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>
49
+ <span class="ruby-identifier">k</span> = <span class="ruby-value">0</span>
50
+ <span class="ruby-keyword kw">end</span>
51
+ <span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">j</span>, <span class="ruby-value str">&quot;j&quot;</span>)
52
+ <span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">k</span>, <span class="ruby-value str">&quot;k&quot;</span>)
53
+
54
+ <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>
55
+ <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>)
56
+ <span class="ruby-keyword kw">end</span>
57
+ <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-value str">&quot;iprec&quot;</span>)
58
+
59
+ <span class="ruby-identifier">dprec</span> = [ <span class="ruby-identifier">iprec</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> ].<span class="ruby-identifier">min</span>
60
+
61
+ <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>)
62
+ <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>)
63
+ <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>
64
+ <span class="ruby-identifier">t</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)
65
+ <span class="ruby-identifier">last_t</span> = <span class="ruby-value">1</span>
66
+ <span class="ruby-identifier">f</span> = <span class="ruby-value">0</span>
67
+ <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
68
+ <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>
69
+ <span class="ruby-identifier">s</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">t</span>
70
+ <span class="ruby-identifier">f</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
71
+ <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>)
72
+ <span class="ruby-keyword kw">end</span>
73
+ <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>)
74
+ <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>)
75
+ <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>
76
+ <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>)
77
+ <span class="ruby-identifier">tu</span> = <span class="ruby-identifier">t</span>.<span class="ruby-identifier">unit</span>
78
+ <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>)
79
+ <span class="ruby-identifier">last_t</span> = <span class="ruby-identifier">tr</span>
80
+ <span class="ruby-keyword kw">end</span>
81
+ <span class="ruby-identifier">x_i</span> = <span class="ruby-value">1</span>
82
+ <span class="ruby-identifier">y_k</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">0</span>)
83
+ <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>
84
+ <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>
85
+ <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>)
86
+ <span class="ruby-keyword kw">end</span>
87
+ <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>)
88
+ <span class="ruby-keyword kw">end</span>
89
+ <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>
90
+ <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>)
91
+ <span class="ruby-keyword kw">end</span>
92
+ <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>)
93
+ <span class="ruby-identifier">y</span>
19
94
  <span class="ruby-keyword kw">end</span></pre>
20
95
  </body>
21
96
  </html>
@@ -5,27 +5,17 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>log10 (LongMath)</title>
8
+ <title>sqrt (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 2085</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">log10</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>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2181</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">rounding_mode</span>)
15
15
  <span class="ruby-identifier">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
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">x</span>.<span class="ruby-identifier">one?</span>) <span class="ruby-keyword kw">then</span>
18
- <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">zero!</span>(<span class="ruby-identifier">prec</span>)
19
- <span class="ruby-keyword kw">end</span>
20
17
  <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
21
- <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
22
- <span class="ruby-identifier">id</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">int_digits10</span>
23
- <span class="ruby-identifier">xx</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">move_point_left</span>(<span class="ruby-identifier">id</span>)
24
- <span class="ruby-comment cmt"># puts(&quot;x=#{x} xx=#{xx} id=#{id} iprec=#{iprec}\n&quot;)</span>
25
- <span class="ruby-identifier">lnxx</span> = <span class="ruby-identifier">log_internal</span>(<span class="ruby-identifier">xx</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
26
- <span class="ruby-identifier">ln10</span> = <span class="ruby-identifier">log_internal</span>(<span class="ruby-value">10</span>.<span class="ruby-identifier">to_ld</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
27
- <span class="ruby-identifier">y</span> = <span class="ruby-identifier">id</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">lnxx</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">ln10</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
28
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">y</span>
18
+ <span class="ruby-identifier">x</span>.<span class="ruby-identifier">sqrt</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
29
19
  <span class="ruby-keyword kw">end</span></pre>
30
20
  </body>
31
21
  </html>
@@ -5,27 +5,17 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>log2 (LongMath)</title>
8
+ <title>log (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 2106</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">log2</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>)
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2192</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">log</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
15
  <span class="ruby-identifier">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
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">x</span>.<span class="ruby-identifier">one?</span>) <span class="ruby-keyword kw">then</span>
18
- <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">zero!</span>(<span class="ruby-identifier">prec</span>)
19
- <span class="ruby-keyword kw">end</span>
20
17
  <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
21
- <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
22
- <span class="ruby-identifier">id</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">int_digits2</span>
23
- <span class="ruby-identifier">xx</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">id</span>)).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span><span class="ruby-operator">+</span><span class="ruby-identifier">id</span>)
24
- <span class="ruby-comment cmt"># puts(&quot;x=#{x} xx=#{xx} id=#{id} iprec=#{iprec}\n&quot;)</span>
25
- <span class="ruby-identifier">lnxx</span> = <span class="ruby-identifier">log_internal</span>(<span class="ruby-identifier">xx</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
26
- <span class="ruby-identifier">ln2</span> = <span class="ruby-identifier">log_internal</span>(<span class="ruby-value">2</span>.<span class="ruby-identifier">to_ld</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
27
- <span class="ruby-identifier">y</span> = <span class="ruby-identifier">id</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">lnxx</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">ln2</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
28
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">y</span>
18
+ <span class="ruby-identifier">log_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
29
19
  <span class="ruby-keyword kw">end</span></pre>
30
20
  </body>
31
21
  </html>
@@ -5,162 +5,27 @@
5
5
 
6
6
  <html>
7
7
  <head>
8
- <title>log_internal (LongMath)</title>
8
+ <title>log10 (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 2130</span>
14
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">log_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">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>)
15
- <span class="ruby-identifier">check_is_ld</span>(<span class="ruby-identifier">x</span>)
16
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;x=#{x.inspect} must not be positive&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
17
- <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>
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">end</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2203</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">log10</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">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
20
16
  <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
21
17
  <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">one?</span>) <span class="ruby-keyword kw">then</span>
22
18
  <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">zero!</span>(<span class="ruby-identifier">prec</span>)
23
19
  <span class="ruby-keyword kw">end</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
20
  <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-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>
32
- <span class="ruby-identifier">iprec</span> = ((<span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">10</span>)<span class="ruby-operator">*</span><span class="ruby-value">1.20</span>).<span class="ruby-identifier">round</span>
33
- <span class="ruby-keyword kw">end</span>
34
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">iprec</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">prec</span>) <span class="ruby-keyword kw">then</span>
35
- <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span>
36
- <span class="ruby-keyword kw">end</span>
37
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-value str">&quot;iprec&quot;</span>)
38
-
39
- <span class="ruby-comment cmt"># dprec = [ iprec - 1, (prec + 1) &lt;&lt; 1 ].min</span>
40
- <span class="ruby-identifier">dprec</span> = <span class="ruby-identifier">iprec</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
41
-
42
- <span class="ruby-identifier">y</span> = <span class="ruby-value">0</span>
43
- <span class="ruby-identifier">s</span> = <span class="ruby-value">1</span>
44
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">then</span>
45
- <span class="ruby-comment cmt"># puts(&quot;x=#{x} iprec=#{iprec}\n&quot;)</span>
46
- <span class="ruby-identifier">x</span> = (<span class="ruby-value">1</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">x</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-identifier">s</span> = <span class="ruby-value">-1</span>
48
- <span class="ruby-comment cmt"># puts(&quot;s=#{s} x=#{x} iprec=#{iprec}\n&quot;)</span>
49
- <span class="ruby-keyword kw">end</span>
50
- <span class="ruby-identifier">exp_part</span> = <span class="ruby-value">0</span>
51
- <span class="ruby-identifier">estimate</span> = <span class="ruby-value">0</span>
52
- <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">x</span> <span class="ruby-operator">&gt;</span> <span class="ruby-constant">MAX_FLOATABLE</span>) <span class="ruby-keyword kw">do</span>
53
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">exp_part</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
54
- <span class="ruby-identifier">estimate</span> = <span class="ruby-constant">MAX_EXP_ABLE</span>.<span class="ruby-identifier">to_ld</span>
55
- <span class="ruby-identifier">exp_part</span> = <span class="ruby-identifier">exp</span>(<span class="ruby-identifier">estimate</span>, <span class="ruby-identifier">iprec</span>)
56
- <span class="ruby-keyword kw">end</span>
57
- <span class="ruby-identifier">x</span> = (<span class="ruby-identifier">x</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">exp_part</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
58
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
59
- <span class="ruby-identifier">y</span> <span class="ruby-operator">-=</span> <span class="ruby-identifier">estimate</span>
60
- <span class="ruby-keyword kw">else</span>
61
- <span class="ruby-identifier">y</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">estimate</span>
62
- <span class="ruby-keyword kw">end</span>
63
- <span class="ruby-keyword kw">end</span>
64
-
65
- <span class="ruby-identifier">delta</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>, <span class="ruby-value">3</span>)
66
- <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">x</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">abs</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">delta</span> <span class="ruby-keyword kw">do</span>
67
- <span class="ruby-comment cmt"># puts(&quot;too far from 1: x=#{x}\n&quot;)</span>
68
- <span class="ruby-identifier">xf</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_f</span>
69
- <span class="ruby-comment cmt"># puts(&quot;xf=#{xf}\n&quot;)</span>
70
- <span class="ruby-identifier">mlx</span> = <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">xf</span>)
71
- <span class="ruby-comment cmt"># puts(&quot;log(xf)=#{mlx}\n&quot;)</span>
72
- <span class="ruby-identifier">estimate</span> = <span class="ruby-identifier">mlx</span>.<span class="ruby-identifier">to_ld</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-value">20</span>, <span class="ruby-identifier">mode</span>)
73
- <span class="ruby-identifier">exp_part</span> = <span class="ruby-identifier">exp</span>(<span class="ruby-identifier">estimate</span>, <span class="ruby-identifier">iprec</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">1</span>)
74
- <span class="ruby-comment cmt"># puts(&quot;y=#{y} s=#{s} est=#{estimate} part=#{exp_part} x=#{x}\n&quot;)</span>
75
- <span class="ruby-identifier">x</span> = (<span class="ruby-identifier">x</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">exp_part</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
76
- <span class="ruby-comment cmt"># puts(&quot;divided by exp_part=#{exp_part}: #{x}\n&quot;)</span>
77
- <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
78
- <span class="ruby-identifier">y</span> <span class="ruby-operator">-=</span> <span class="ruby-identifier">estimate</span>
79
- <span class="ruby-keyword kw">else</span>
80
- <span class="ruby-identifier">y</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">estimate</span>
81
- <span class="ruby-keyword kw">end</span>
82
- <span class="ruby-comment cmt"># puts(&quot;y=#{y} s=#{s} est=#{estimate} part=#{exp_part} x=#{x}\n&quot;)</span>
83
- <span class="ruby-keyword kw">end</span>
84
-
85
- <span class="ruby-identifier">factor</span> = <span class="ruby-value">1</span>
86
- <span class="ruby-comment cmt"># delta = LongDecimal(1, (iprec.to_f**(1/3)).round)</span>
87
- <span class="ruby-comment cmt"># while (x - 1).abs &gt; delta do</span>
88
- <span class="ruby-comment cmt"># x = sqrt(x)</span>
89
- <span class="ruby-comment cmt"># factor *= 2</span>
90
- <span class="ruby-comment cmt"># end</span>
91
-
92
- <span class="ruby-identifier">sum</span> = <span class="ruby-value">0</span>
93
- <span class="ruby-identifier">z</span> = <span class="ruby-value">1</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">x</span>
94
- <span class="ruby-identifier">i</span> = <span class="ruby-value">1</span>
95
- <span class="ruby-identifier">p</span> = <span class="ruby-value">1</span>.<span class="ruby-identifier">to_ld</span>
96
- <span class="ruby-identifier">d</span> = <span class="ruby-value">1</span>.<span class="ruby-identifier">to_ld</span>
97
- <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">abs</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">zero?</span> <span class="ruby-keyword kw">do</span>
98
- <span class="ruby-identifier">p</span> = (<span class="ruby-identifier">p</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">z</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
99
- <span class="ruby-identifier">d</span> = (<span class="ruby-identifier">p</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">i</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
100
- <span class="ruby-identifier">i</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
101
- <span class="ruby-identifier">sum</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">d</span>
102
-
103
- <span class="ruby-comment cmt"># puts(&quot;log_internal: s=#{sum} d=#{d} x=#{x} i=#{i} p=#{p} iprec=#{iprec} dprec=#{dprec}\n&quot;) if (i &amp; 0x0f == 0x0f)</span>
104
- <span class="ruby-keyword kw">end</span>
105
-
106
- <span class="ruby-comment cmt"># puts(&quot;y=#{y} s=#{s} f=#{factor} sum=#{sum}\n&quot;)</span>
107
- <span class="ruby-identifier">y</span> <span class="ruby-operator">-=</span> ((<span class="ruby-identifier">s</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">factor</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">sum</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
108
- <span class="ruby-comment cmt"># puts(&quot;y=#{y} s=#{s} f=#{factor} sum=#{sum}\n&quot;)</span>
109
- <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
110
-
111
- <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># log_internal</span>
112
-
113
- <span class="ruby-comment cmt">#</span>
114
- <span class="ruby-comment cmt"># calc the power of x with exponent y to the given precision as</span>
115
- <span class="ruby-comment cmt"># LongDecimal. Only supports values of y such that exp(y) still</span>
116
- <span class="ruby-comment cmt"># fits into a float (y &lt;= 709)</span>
117
- <span class="ruby-comment cmt">#</span>
118
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</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>)
119
- <span class="ruby-identifier">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
120
- <span class="ruby-identifier">check_is_ld</span>(<span class="ruby-identifier">y</span>, <span class="ruby-value str">&quot;y&quot;</span>)
121
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;y=#{y.inspect} must not be greater #{MAX_EXP_ABLE}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">y</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-constant">MAX_EXP_ABLE</span>
122
- <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_FLOATABLE}&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_FLOATABLE</span>
123
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;x=#{x.inspect} must not positive&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
124
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
125
- <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
126
- <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
127
- <span class="ruby-keyword kw">end</span>
128
-
129
- <span class="ruby-comment cmt">#</span>
130
- <span class="ruby-comment cmt"># internal functionality of exp. exposes some more parameters, that</span>
131
- <span class="ruby-comment cmt"># should usually be set to defaut values, in order to allow better testing.</span>
132
- <span class="ruby-comment cmt"># do not actually call this method unless you are testing exp.</span>
133
- <span class="ruby-comment cmt"># create a bug report, if the default settings for the parameters do</span>
134
- <span class="ruby-comment cmt"># not work correctly</span>
135
- <span class="ruby-comment cmt">#</span>
136
- <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</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">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>)
137
- <span class="ruby-identifier">check_is_ld</span>(<span class="ruby-identifier">x</span>, <span class="ruby-value str">&quot;x&quot;</span>)
138
- <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>
139
- <span class="ruby-identifier">prec</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span>
140
- <span class="ruby-keyword kw">end</span>
141
- <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
142
-
143
- <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>)
144
- <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>
145
- <span class="ruby-keyword kw">end</span>
146
- <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>)
147
- <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
148
-
149
- <span class="ruby-identifier">logx_y_f</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-identifier">y</span>.<span class="ruby-identifier">to_f</span>)
150
-
151
- <span class="ruby-comment cmt"># iprec = (prec * 1.2 + 20 + (y.abs.to_f) * 1.5 * x.int_digits2).round</span>
152
- <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>
153
- <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">calc_iprec_for_exp</span>(<span class="ruby-identifier">logx_y_f</span>, <span class="ruby-identifier">prec</span>) <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
154
- <span class="ruby-keyword kw">end</span>
155
- <span class="ruby-comment cmt"># puts(&quot;power_internal: x=#{x} y=#{y} logx_y=#{logx_y_f} iprec=#{iprec} prec=#{prec}\n&quot;)</span>
156
- <span class="ruby-identifier">logx</span> = <span class="ruby-identifier">log</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
157
- <span class="ruby-identifier">logx_y</span> = <span class="ruby-identifier">logx</span><span class="ruby-operator">*</span><span class="ruby-identifier">y</span>
158
- <span class="ruby-identifier">xy</span> = <span class="ruby-identifier">exp_internal</span>(<span class="ruby-identifier">logx_y</span>, <span class="ruby-identifier">prec</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-identifier">mode</span>)
159
- <span class="ruby-comment cmt"># puts(&quot;power_internal: x=#{x} logx=#{logx} y=#{y} logx_y=#{logx_y} xy=#{xy} iprec=#{iprec} prec=#{prec}\n&quot;)</span>
160
- <span class="ruby-identifier">xy</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">final_mode</span>)
161
-
162
- <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># power_internal</span>
163
-
164
- <span class="ruby-keyword kw">end</span></pre>
21
+ <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
22
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">int_digits10</span>
23
+ <span class="ruby-identifier">xx</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">move_point_left</span>(<span class="ruby-identifier">id</span>)
24
+ <span class="ruby-comment cmt"># puts(&quot;x=#{x} xx=#{xx} id=#{id} iprec=#{iprec}\n&quot;)</span>
25
+ <span class="ruby-identifier">lnxx</span> = <span class="ruby-identifier">log_internal</span>(<span class="ruby-identifier">xx</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
26
+ <span class="ruby-identifier">ln10</span> = <span class="ruby-identifier">log_internal</span>(<span class="ruby-value">10</span>.<span class="ruby-identifier">to_ld</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
27
+ <span class="ruby-identifier">y</span> = <span class="ruby-identifier">id</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">lnxx</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">ln10</span>).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
28
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">y</span>
29
+ <span class="ruby-keyword kw">end</span></pre>
165
30
  </body>
166
31
  </html>