long-decimal 0.00.22 → 0.01.00

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. data/README +157 -32
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/doc/classes/LongDecimal.src/M000036.html +1 -1
  5. data/doc/classes/LongDecimal.src/M000037.html +1 -1
  6. data/doc/classes/LongDecimal.src/M000038.html +1 -1
  7. data/doc/classes/LongDecimal.src/M000039.html +1 -1
  8. data/doc/classes/LongDecimal.src/M000040.html +1 -1
  9. data/doc/classes/LongDecimal.src/M000041.html +1 -1
  10. data/doc/classes/LongDecimal.src/M000042.html +1 -1
  11. data/doc/classes/LongDecimal.src/M000043.html +1 -1
  12. data/doc/classes/LongDecimal.src/M000044.html +1 -1
  13. data/doc/classes/LongDecimal.src/M000045.html +1 -1
  14. data/doc/classes/LongDecimal.src/M000046.html +1 -1
  15. data/doc/classes/LongDecimal.src/M000047.html +1 -1
  16. data/doc/classes/LongDecimal.src/M000048.html +1 -1
  17. data/doc/classes/LongDecimal.src/M000049.html +1 -1
  18. data/doc/classes/LongDecimal.src/M000050.html +1 -1
  19. data/doc/classes/LongDecimal.src/M000051.html +1 -1
  20. data/doc/classes/LongDecimal.src/M000052.html +1 -1
  21. data/doc/classes/LongDecimal.src/M000053.html +1 -1
  22. data/doc/classes/LongDecimal.src/M000054.html +1 -1
  23. data/doc/classes/LongDecimal.src/M000055.html +1 -1
  24. data/doc/classes/LongDecimal.src/M000056.html +1 -1
  25. data/doc/classes/LongDecimal.src/M000057.html +1 -1
  26. data/doc/classes/LongDecimal.src/M000058.html +1 -1
  27. data/doc/classes/LongDecimal.src/M000059.html +1 -1
  28. data/doc/classes/LongDecimal.src/M000060.html +1 -1
  29. data/doc/classes/LongDecimal.src/M000062.html +1 -1
  30. data/doc/classes/LongDecimal.src/M000063.html +1 -1
  31. data/doc/classes/LongDecimal.src/M000064.html +1 -1
  32. data/doc/classes/LongDecimal.src/M000065.html +1 -1
  33. data/doc/classes/LongDecimal.src/M000066.html +1 -1
  34. data/doc/classes/LongDecimal.src/M000067.html +1 -1
  35. data/doc/classes/LongDecimal.src/M000068.html +1 -1
  36. data/doc/classes/LongDecimal.src/M000069.html +1 -1
  37. data/doc/classes/LongDecimal.src/M000070.html +1 -1
  38. data/doc/classes/LongDecimal.src/M000071.html +6 -2
  39. data/doc/classes/LongDecimal.src/M000072.html +1 -1
  40. data/doc/classes/LongDecimal.src/M000073.html +1 -1
  41. data/doc/classes/LongDecimal.src/M000074.html +1 -1
  42. data/doc/classes/LongDecimal.src/M000075.html +1 -1
  43. data/doc/classes/LongDecimal.src/M000076.html +1 -1
  44. data/doc/classes/LongDecimal.src/M000077.html +1 -1
  45. data/doc/classes/LongDecimal.src/M000078.html +1 -1
  46. data/doc/classes/LongDecimal.src/M000079.html +1 -1
  47. data/doc/classes/LongDecimal.src/M000080.html +1 -1
  48. data/doc/classes/LongDecimal.src/M000081.html +1 -1
  49. data/doc/classes/LongDecimal.src/M000082.html +1 -1
  50. data/doc/classes/LongDecimal.src/M000083.html +1 -1
  51. data/doc/classes/LongDecimal.src/M000084.html +1 -1
  52. data/doc/classes/LongDecimal.src/M000085.html +1 -1
  53. data/doc/classes/LongDecimal.src/M000086.html +1 -1
  54. data/doc/classes/LongDecimal.src/M000087.html +1 -1
  55. data/doc/classes/LongDecimal.src/M000088.html +1 -1
  56. data/doc/classes/LongDecimal.src/M000089.html +1 -1
  57. data/doc/classes/LongDecimal.src/M000090.html +1 -1
  58. data/doc/classes/LongDecimal.src/M000091.html +1 -1
  59. data/doc/classes/LongDecimal.src/M000092.html +1 -1
  60. data/doc/classes/LongDecimal.src/M000093.html +1 -1
  61. data/doc/classes/LongDecimal.src/M000094.html +1 -1
  62. data/doc/classes/LongDecimal.src/M000095.html +1 -1
  63. data/doc/classes/LongDecimal.src/M000098.html +1 -1
  64. data/doc/classes/LongDecimal.src/M000099.html +1 -1
  65. data/doc/classes/LongDecimal.src/M000100.html +1 -1
  66. data/doc/classes/LongDecimal.src/M000101.html +1 -1
  67. data/doc/classes/LongDecimal.src/M000102.html +18 -0
  68. data/doc/classes/LongDecimal.src/M000103.html +18 -0
  69. data/doc/classes/LongDecimalBase.src/M000107.html +1 -1
  70. data/doc/classes/LongDecimalBase.src/M000108.html +1 -1
  71. data/doc/classes/LongDecimalBase.src/M000109.html +1 -1
  72. data/doc/classes/LongDecimalBase.src/M000110.html +1 -1
  73. data/doc/classes/LongDecimalBase.src/M000111.html +1 -1
  74. data/doc/classes/LongDecimalBase.src/M000112.html +1 -1
  75. data/doc/classes/LongDecimalBase.src/M000115.html +1 -1
  76. data/doc/classes/LongDecimalBase.src/M000116.html +19 -0
  77. data/doc/classes/LongDecimalBase.src/M000117.html +18 -0
  78. data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
  79. data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
  80. data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
  81. data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
  82. data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
  83. data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
  84. data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
  85. data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
  86. data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
  87. data/doc/classes/LongDecimalQuot.src/M000012.html +1 -1
  88. data/doc/classes/LongDecimalQuot.src/M000013.html +13 -2
  89. data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
  90. data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
  91. data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
  92. data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
  93. data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
  94. data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
  95. data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
  96. data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
  97. data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
  98. data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
  99. data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
  100. data/doc/classes/LongDecimalQuot.src/M000025.html +18 -1
  101. data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
  102. data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
  103. data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
  104. data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
  105. data/doc/classes/LongDecimalQuot.src/M000030.html +18 -0
  106. data/doc/classes/LongDecimalQuot.src/M000031.html +18 -0
  107. data/doc/classes/LongDecimalQuot.src/M000034.html +18 -0
  108. data/doc/classes/LongDecimalQuot.src/M000035.html +18 -0
  109. data/doc/classes/LongDecimalRoundingMode.html +17 -2
  110. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +17 -2
  111. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000150.html +22 -0
  112. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000151.html +18 -0
  113. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000152.html +18 -0
  114. data/doc/classes/LongMath.src/M000118.html +1 -1
  115. data/doc/classes/LongMath.src/M000119.html +1 -1
  116. data/doc/classes/LongMath.src/M000120.html +1 -1
  117. data/doc/classes/LongMath.src/M000121.html +1 -1
  118. data/doc/classes/LongMath.src/M000122.html +1 -1
  119. data/doc/classes/LongMath.src/M000123.html +1 -1
  120. data/doc/classes/LongMath.src/M000124.html +1 -1
  121. data/doc/classes/LongMath.src/M000125.html +1 -1
  122. data/doc/classes/LongMath.src/M000126.html +1 -1
  123. data/doc/classes/LongMath.src/M000127.html +1 -1
  124. data/doc/classes/LongMath.src/M000128.html +1 -1
  125. data/doc/classes/LongMath.src/M000129.html +1 -1
  126. data/doc/classes/LongMath.src/M000130.html +1 -1
  127. data/doc/classes/LongMath.src/M000131.html +1 -1
  128. data/doc/classes/LongMath.src/M000132.html +1 -1
  129. data/doc/classes/LongMath.src/M000133.html +1 -1
  130. data/doc/classes/LongMath.src/M000134.html +1 -1
  131. data/doc/classes/LongMath.src/M000135.html +1 -1
  132. data/doc/classes/LongMath.src/M000136.html +1 -1
  133. data/doc/classes/LongMath.src/M000137.html +11 -3
  134. data/doc/classes/LongMath.src/M000138.html +2 -1
  135. data/doc/classes/LongMath.src/M000139.html +1 -1
  136. data/doc/classes/LongMath.src/M000140.html +1 -1
  137. data/doc/classes/LongMath.src/M000141.html +1 -1
  138. data/doc/classes/LongMath.src/M000142.html +2 -2
  139. data/doc/classes/LongMath.src/M000143.html +2 -2
  140. data/doc/classes/LongMath.src/M000144.html +3 -2
  141. data/doc/classes/LongMath.src/M000145.html +20 -10
  142. data/doc/classes/LongMath.src/M000146.html +3 -2
  143. data/doc/classes/LongMath.src/M000147.html +80 -0
  144. data/doc/classes/LongMath.src/M000148.html +63 -0
  145. data/doc/classes/LongMath/CacheKey.src/M000149.html +36 -0
  146. data/doc/classes/Numeric.src/M000104.html +23 -0
  147. data/doc/classes/Numeric.src/M000105.html +18 -0
  148. data/doc/classes/Rational.src/M000106.html +23 -0
  149. data/doc/created.rid +1 -1
  150. data/doc/files/lib/long-decimal_rb.html +189 -0
  151. data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
  152. data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
  153. data/doc/fr_method_index.html +20 -19
  154. data/lib/long-decimal.rb +105 -30
  155. data/test/testlongdecimal.rb +448 -3
  156. data/test/testlongdeclib.rb +127 -28
  157. data/test/testrandom.rb +35 -22
  158. data/version.rb +4 -4
  159. metadata +20 -2
@@ -10,12 +10,12 @@
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 2545</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2609</span>
14
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
15
 
16
16
  <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
17
17
  <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
18
- <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
18
+ <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span> <span class="ruby-operator">+</span> <span class="ruby-value">5</span>
19
19
  <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
20
20
  <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
21
21
  <span class="ruby-keyword kw">end</span>
@@ -10,12 +10,12 @@
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 2569</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2633</span>
14
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>)
15
15
 
16
16
  <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
17
17
  <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
18
- <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
18
+ <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span> <span class="ruby-operator">+</span> <span class="ruby-value">6</span>
19
19
  <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
20
20
  <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
21
21
  <span class="ruby-keyword kw">end</span>
@@ -10,7 +10,7 @@
10
10
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2595</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2659</span>
14
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>, <span class="ruby-identifier">cache_result</span> = <span class="ruby-keyword kw">true</span>)
15
15
 
16
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>
@@ -30,7 +30,8 @@
30
30
  <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
31
31
 
32
32
  <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>
33
- <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-comment cmt"># iprec = ((prec+10)*1.20).round</span>
34
+ <span class="ruby-identifier">iprec</span> = ((<span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-value">12</span>)<span class="ruby-operator">*</span><span class="ruby-value">1.20</span>).<span class="ruby-identifier">round</span>
34
35
  <span class="ruby-keyword kw">end</span>
35
36
  <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>
36
37
  <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">prec</span>
@@ -10,7 +10,7 @@
10
10
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2643</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2708</span>
14
14
  <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">log_raw</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">prec</span>, <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
15
15
 
16
16
  <span class="ruby-comment cmt"># t0 = Time.new</span>
@@ -89,7 +89,8 @@
89
89
  <span class="ruby-identifier">logx_f</span> = <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">x_f</span>.<span class="ruby-identifier">abs</span>)
90
90
  <span class="ruby-identifier">logy_f</span> = <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">y_f</span>.<span class="ruby-identifier">abs</span>)
91
91
  <span class="ruby-identifier">logx_y_f</span> = <span class="ruby-identifier">logx_f</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">y_f</span>
92
- <span class="ruby-identifier">iprec_x</span> = <span class="ruby-identifier">calc_iprec_for_exp</span>(<span class="ruby-identifier">logx_y_f</span>, <span class="ruby-identifier">prec</span>)
92
+ <span class="ruby-identifier">iprec_x</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-identifier">logx_y_f</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>)
93
+ <span class="ruby-comment cmt"># iprec_x = calc_iprec_for_exp(logx_y_f, prec, logx_y_f &lt; 0) + 10</span>
93
94
  <span class="ruby-identifier">iprec_y</span> = <span class="ruby-identifier">iprec_x</span>
94
95
  <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">iprec_x</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
95
96
  <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">logx_f</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>)
@@ -115,7 +116,8 @@
115
116
  <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;y=#{y} must be numeric&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Numeric</span>
116
117
  <span class="ruby-comment cmt"># raise TypeError, &quot;y=#{y.inspect} must not be greater #{MAX_EXP_ABLE}&quot; unless y &lt;= MAX_EXP_ABLE</span>
117
118
  <span class="ruby-comment cmt"># raise TypeError, &quot;x=#{x.inspect} must not be greater #{MAX_FLOATABLE}&quot; unless x &lt;= MAX_FLOATABLE</span>
118
- <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>
119
+ <span class="ruby-comment cmt"># raise TypeError, &quot;x=#{x.inspect} must not negative&quot; unless x &gt;= 0 || (y.kind_of? Integer) || (y.kind_of? LongDecimalBase) &amp;&amp; y.is_int?</span>
120
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;x=#{x.inspect} must not negative&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>
119
121
  <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
120
122
  <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
121
123
 
@@ -145,7 +147,8 @@
145
147
  <span class="ruby-keyword kw">end</span>
146
148
  <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>)
147
149
  <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>
148
- <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span>)
150
+ <span class="ruby-comment cmt"># x = x.to_ld(prec)</span>
151
+ <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_x</span>)
149
152
  <span class="ruby-keyword kw">end</span>
150
153
  <span class="ruby-identifier">z</span> = <span class="ruby-identifier">x</span><span class="ruby-operator">**</span><span class="ruby-identifier">y</span>
151
154
  <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">z</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
@@ -154,7 +157,8 @@
154
157
  <span class="ruby-comment cmt"># it can be assumed that the exponent is not an integer, so it should</span>
155
158
  <span class="ruby-comment cmt"># be converted into LongDecimal</span>
156
159
  <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
157
- <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
160
+ <span class="ruby-comment cmt"># y = y.to_ld(prec, mode)</span>
161
+ <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_y</span>, <span class="ruby-identifier">mode</span>)
158
162
  <span class="ruby-keyword kw">end</span>
159
163
 
160
164
  <span class="ruby-comment cmt"># exponent is split in two parts, an integer part and a</span>
@@ -166,7 +170,8 @@
166
170
  <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">y0</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>)
167
171
  <span class="ruby-identifier">prec_extra</span> = (<span class="ruby-identifier">y0</span><span class="ruby-operator">*</span><span class="ruby-constant">Math</span>.<span class="ruby-identifier">log10</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_f</span>).<span class="ruby-identifier">abs</span>).<span class="ruby-identifier">ceil</span>
168
172
  <span class="ruby-keyword kw">end</span>
169
- <span class="ruby-identifier">z1</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y1</span>, <span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-identifier">prec_extra</span>, <span class="ruby-identifier">mode</span>)
173
+ <span class="ruby-comment cmt"># z1 = LongMath.power_internal(x, y1, prec+prec_extra , mode)</span>
174
+ <span class="ruby-identifier">z1</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y1</span>, <span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-identifier">prec_extra</span> <span class="ruby-operator">+</span> <span class="ruby-value">3</span>, <span class="ruby-identifier">mode</span>)
170
175
  <span class="ruby-identifier">z</span> = <span class="ruby-identifier">z0</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">z1</span>
171
176
  <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">z</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
172
177
  <span class="ruby-keyword kw">end</span>
@@ -209,15 +214,20 @@
209
214
  <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">iprec_x</span>, <span class="ruby-identifier">iprec_y</span> = <span class="ruby-identifier">calc_iprec_for_power</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">prec</span>)
210
215
  <span class="ruby-keyword kw">end</span>
211
216
  <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
212
- <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
217
+ <span class="ruby-comment cmt"># x = x.to_ld(iprec, mode)</span>
218
+ <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_x</span>, <span class="ruby-identifier">mode</span>)
213
219
  <span class="ruby-keyword kw">end</span>
214
220
  <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
215
- <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">mode</span>)
221
+ <span class="ruby-comment cmt"># y = y.to_ld(iprec, mode)</span>
222
+ <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_y</span>, <span class="ruby-identifier">mode</span>)
216
223
  <span class="ruby-keyword kw">end</span>
217
224
 
218
- <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>)
225
+ <span class="ruby-comment cmt"># logx = log(x, iprec, mode)</span>
226
+ <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-operator">+</span> <span class="ruby-value">20</span>, <span class="ruby-identifier">mode</span>)
219
227
  <span class="ruby-identifier">logx_y</span> = <span class="ruby-identifier">logx</span><span class="ruby-operator">*</span><span class="ruby-identifier">y</span>
220
- <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>)
228
+ <span class="ruby-comment cmt"># xy = exp_internal(logx_y, prec + 1, mode)</span>
229
+ <span class="ruby-comment cmt"># xy = exp_internal(logx_y, prec + 4, mode)</span>
230
+ <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">3</span>, <span class="ruby-identifier">mode</span>)
221
231
  <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>)
222
232
 
223
233
  <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># power_internal</span>
@@ -10,14 +10,15 @@
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 2715</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2780</span>
14
14
  <span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">calc_iprec_for_power</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">prec</span>)
15
15
  <span class="ruby-identifier">x_f</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_f</span>
16
16
  <span class="ruby-identifier">y_f</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_f</span>
17
17
  <span class="ruby-identifier">logx_f</span> = <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">x_f</span>.<span class="ruby-identifier">abs</span>)
18
18
  <span class="ruby-identifier">logy_f</span> = <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log</span>(<span class="ruby-identifier">y_f</span>.<span class="ruby-identifier">abs</span>)
19
19
  <span class="ruby-identifier">logx_y_f</span> = <span class="ruby-identifier">logx_f</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">y_f</span>
20
- <span class="ruby-identifier">iprec_x</span> = <span class="ruby-identifier">calc_iprec_for_exp</span>(<span class="ruby-identifier">logx_y_f</span>, <span class="ruby-identifier">prec</span>)
20
+ <span class="ruby-identifier">iprec_x</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-identifier">logx_y_f</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>)
21
+ <span class="ruby-comment cmt"># iprec_x = calc_iprec_for_exp(logx_y_f, prec, logx_y_f &lt; 0) + 10</span>
21
22
  <span class="ruby-identifier">iprec_y</span> = <span class="ruby-identifier">iprec_x</span>
22
23
  <span class="ruby-identifier">iprec</span> = <span class="ruby-identifier">iprec_x</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
23
24
  <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">logx_f</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>)
@@ -0,0 +1,80 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>power (LongMath)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2807</span>
14
+ <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>)
15
+
16
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;x=#{x} must be numeric&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Numeric</span>
17
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;y=#{y} must be numeric&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Numeric</span>
18
+ <span class="ruby-comment cmt"># raise TypeError, &quot;y=#{y.inspect} must not be greater #{MAX_EXP_ABLE}&quot; unless y &lt;= MAX_EXP_ABLE</span>
19
+ <span class="ruby-comment cmt"># raise TypeError, &quot;x=#{x.inspect} must not be greater #{MAX_FLOATABLE}&quot; unless x &lt;= MAX_FLOATABLE</span>
20
+ <span class="ruby-comment cmt"># raise TypeError, &quot;x=#{x.inspect} must not negative&quot; unless x &gt;= 0 || (y.kind_of? Integer) || (y.kind_of? LongDecimalBase) &amp;&amp; y.is_int?</span>
21
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;x=#{x.inspect} must not negative&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>
22
+ <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
23
+ <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
24
+
25
+ <span class="ruby-comment cmt"># handle the special cases where base or exponent are 0 or 1 explicitely</span>
26
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">then</span>
27
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">one!</span>(<span class="ruby-identifier">prec</span>)
28
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">then</span>
29
+ <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>)
30
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">one?</span> <span class="ruby-keyword kw">then</span>
31
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
32
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">one?</span> <span class="ruby-keyword kw">then</span>
33
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">one!</span>(<span class="ruby-identifier">prec</span>)
34
+ <span class="ruby-keyword kw">end</span>
35
+
36
+ <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">iprec_x</span>, <span class="ruby-identifier">iprec_y</span> = <span class="ruby-identifier">calc_iprec_for_power</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">prec</span>)
37
+
38
+ <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>) <span class="ruby-operator">||</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>)
39
+ <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_x</span>, <span class="ruby-identifier">mode</span>)
40
+ <span class="ruby-keyword kw">end</span>
41
+ <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>) <span class="ruby-operator">||</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>)
42
+ <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_y</span>, <span class="ruby-identifier">mode</span>)
43
+ <span class="ruby-keyword kw">end</span>
44
+
45
+ <span class="ruby-comment cmt"># try shortcut if exponent is an integer</span>
46
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">is_int?</span>
47
+ <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_i</span>
48
+ <span class="ruby-keyword kw">end</span>
49
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>)
50
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>
51
+ <span class="ruby-comment cmt"># x = x.to_ld(prec)</span>
52
+ <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_x</span>)
53
+ <span class="ruby-keyword kw">end</span>
54
+ <span class="ruby-identifier">z</span> = <span class="ruby-identifier">x</span><span class="ruby-operator">**</span><span class="ruby-identifier">y</span>
55
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">z</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
56
+ <span class="ruby-keyword kw">end</span>
57
+
58
+ <span class="ruby-comment cmt"># it can be assumed that the exponent is not an integer, so it should</span>
59
+ <span class="ruby-comment cmt"># be converted into LongDecimal</span>
60
+ <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
61
+ <span class="ruby-comment cmt"># y = y.to_ld(prec, mode)</span>
62
+ <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_y</span>, <span class="ruby-identifier">mode</span>)
63
+ <span class="ruby-keyword kw">end</span>
64
+
65
+ <span class="ruby-comment cmt"># exponent is split in two parts, an integer part and a</span>
66
+ <span class="ruby-comment cmt"># LongDecimal with absolute value &lt;= 0.5</span>
67
+ <span class="ruby-identifier">y0</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-value">0</span>, <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_UP</span>).<span class="ruby-identifier">to_i</span>
68
+ <span class="ruby-identifier">z0</span> = <span class="ruby-identifier">x</span><span class="ruby-operator">**</span><span class="ruby-identifier">y0</span>
69
+ <span class="ruby-identifier">y1</span> = <span class="ruby-identifier">y</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">y0</span>
70
+ <span class="ruby-identifier">prec_extra</span> = <span class="ruby-value">0</span>
71
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">y0</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>)
72
+ <span class="ruby-identifier">prec_extra</span> = (<span class="ruby-identifier">y0</span><span class="ruby-operator">*</span><span class="ruby-constant">Math</span>.<span class="ruby-identifier">log10</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_f</span>).<span class="ruby-identifier">abs</span>).<span class="ruby-identifier">ceil</span>
73
+ <span class="ruby-keyword kw">end</span>
74
+ <span class="ruby-comment cmt"># z1 = LongMath.power_internal(x, y1, prec+prec_extra , mode)</span>
75
+ <span class="ruby-identifier">z1</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">power_internal</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y1</span>, <span class="ruby-identifier">prec</span><span class="ruby-operator">+</span><span class="ruby-identifier">prec_extra</span> <span class="ruby-operator">+</span> <span class="ruby-value">3</span>, <span class="ruby-identifier">mode</span>)
76
+ <span class="ruby-identifier">z</span> = <span class="ruby-identifier">z0</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">z1</span>
77
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">z</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
78
+ <span class="ruby-keyword kw">end</span></pre>
79
+ </body>
80
+ </html>
@@ -0,0 +1,63 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>power_internal (LongMath)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 2880</span>
14
+ <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>)
15
+
16
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">prec</span> <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>) <span class="ruby-keyword kw">then</span>
17
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>) <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>)
18
+ <span class="ruby-identifier">prec</span> = [<span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span>, <span class="ruby-identifier">y</span>.<span class="ruby-identifier">scale</span>].<span class="ruby-identifier">max</span>
19
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>)
20
+ <span class="ruby-identifier">prec</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">scale</span>
21
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimalBase</span>)
22
+ <span class="ruby-identifier">prec</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">scale</span>
23
+ <span class="ruby-keyword kw">else</span>
24
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;precision must be supplied either as precision of x=#{x} or explicitely&quot;</span>
25
+ <span class="ruby-keyword kw">end</span>
26
+ <span class="ruby-keyword kw">end</span>
27
+ <span class="ruby-identifier">check_is_prec</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-value str">&quot;prec&quot;</span>)
28
+
29
+ <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>)
30
+ <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>
31
+ <span class="ruby-keyword kw">end</span>
32
+ <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>)
33
+ <span class="ruby-identifier">check_is_mode</span>(<span class="ruby-identifier">mode</span>, <span class="ruby-value str">&quot;mode&quot;</span>)
34
+
35
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">y</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">then</span>
36
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">one!</span>(<span class="ruby-identifier">prec</span>)
37
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">then</span>
38
+ <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>)
39
+ <span class="ruby-keyword kw">end</span>
40
+
41
+ <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>
42
+ <span class="ruby-identifier">iprec</span>, <span class="ruby-identifier">iprec_x</span>, <span class="ruby-identifier">iprec_y</span> = <span class="ruby-identifier">calc_iprec_for_power</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">y</span>, <span class="ruby-identifier">prec</span>)
43
+ <span class="ruby-keyword kw">end</span>
44
+ <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
45
+ <span class="ruby-comment cmt"># x = x.to_ld(iprec, mode)</span>
46
+ <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_x</span>, <span class="ruby-identifier">mode</span>)
47
+ <span class="ruby-keyword kw">end</span>
48
+ <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">y</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>)
49
+ <span class="ruby-comment cmt"># y = y.to_ld(iprec, mode)</span>
50
+ <span class="ruby-identifier">y</span> = <span class="ruby-identifier">y</span>.<span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">iprec_y</span>, <span class="ruby-identifier">mode</span>)
51
+ <span class="ruby-keyword kw">end</span>
52
+
53
+ <span class="ruby-comment cmt"># logx = log(x, iprec, mode)</span>
54
+ <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-operator">+</span> <span class="ruby-value">20</span>, <span class="ruby-identifier">mode</span>)
55
+ <span class="ruby-identifier">logx_y</span> = <span class="ruby-identifier">logx</span><span class="ruby-operator">*</span><span class="ruby-identifier">y</span>
56
+ <span class="ruby-comment cmt"># xy = exp_internal(logx_y, prec + 1, mode)</span>
57
+ <span class="ruby-comment cmt"># xy = exp_internal(logx_y, prec + 4, mode)</span>
58
+ <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">3</span>, <span class="ruby-identifier">mode</span>)
59
+ <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>)
60
+
61
+ <span class="ruby-keyword kw">end</span></pre>
62
+ </body>
63
+ </html>
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>&lt;=&gt; (LongMath::CacheKey)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1854</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-operator">&lt;=&gt;</span>(<span class="ruby-identifier">o</span>)
15
+ <span class="ruby-identifier">r</span> = <span class="ruby-value">0</span>
16
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">respond_to?</span><span class="ruby-identifier">:fname</span>
17
+ <span class="ruby-identifier">r</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">fname</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">fname</span>
18
+ <span class="ruby-keyword kw">else</span>
19
+ <span class="ruby-identifier">r</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">fname</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">o</span>
20
+ <span class="ruby-keyword kw">end</span>
21
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">r</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">r</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>)
22
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">respond_to?</span><span class="ruby-identifier">:arg</span>
23
+ <span class="ruby-identifier">r</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">arg</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">arg</span>
24
+ <span class="ruby-keyword kw">else</span>
25
+ <span class="ruby-identifier">r</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">arg</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">o</span>
26
+ <span class="ruby-keyword kw">end</span>
27
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">r</span> <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">r</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>)
28
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">respond_to?</span><span class="ruby-identifier">:mode</span>
29
+ <span class="ruby-identifier">r</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">mode</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">mode</span>
30
+ <span class="ruby-keyword kw">else</span>
31
+ <span class="ruby-identifier">r</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">mode</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">o</span>
32
+ <span class="ruby-keyword kw">end</span>
33
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">r</span>
34
+ <span class="ruby-keyword kw">end</span></pre>
35
+ </body>
36
+ </html>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>to_ld (Numeric)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1785</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_UP</span>)
15
+ <span class="ruby-identifier">l</span> = <span class="ruby-constant">LongDecimal</span>(<span class="ruby-keyword kw">self</span>)
16
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">prec</span>.<span class="ruby-identifier">nil?</span>)
17
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">l</span>
18
+ <span class="ruby-keyword kw">else</span>
19
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
20
+ <span class="ruby-keyword kw">end</span>
21
+ <span class="ruby-keyword kw">end</span></pre>
22
+ </body>
23
+ </html>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>one? (Numeric)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1797</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">one?</span>
15
+ (<span class="ruby-keyword kw">self</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>).<span class="ruby-identifier">zero?</span>
16
+ <span class="ruby-keyword kw">end</span></pre>
17
+ </body>
18
+ </html>
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>to_ld (Rational)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1812</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_ld</span>(<span class="ruby-identifier">prec</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">LongDecimal</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_UP</span>)
15
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">prec</span>.<span class="ruby-identifier">nil?</span>)
16
+ <span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimal</span>(<span class="ruby-keyword kw">self</span>)
17
+ <span class="ruby-keyword kw">else</span>
18
+ <span class="ruby-identifier">l</span> = <span class="ruby-constant">LongDecimalQuot</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">prec</span>)
19
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
20
+ <span class="ruby-keyword kw">end</span>
21
+ <span class="ruby-keyword kw">end</span></pre>
22
+ </body>
23
+ </html>
@@ -1 +1 @@
1
- Sat Apr 08 00:49:02 CEST 2006
1
+ Tue Apr 11 22:08:00 CEST 2006
@@ -0,0 +1,189 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>File: long-decimal.rb</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="fileHeader">
50
+ <h1>long-decimal.rb</h1>
51
+ <table class="header-table">
52
+ <tr class="top-aligned-row">
53
+ <td><strong>Path:</strong></td>
54
+ <td>lib/long-decimal.rb
55
+ </td>
56
+ </tr>
57
+ <tr class="top-aligned-row">
58
+ <td><strong>Last Update:</strong></td>
59
+ <td>Tue Apr 11 22:02:00 CEST 2006</td>
60
+ </tr>
61
+ </table>
62
+ </div>
63
+ <!-- banner header -->
64
+
65
+ <div id="bodyContent">
66
+
67
+
68
+
69
+ <div id="contextContent">
70
+ <div id="diagram">
71
+ <map id="map" name="map">
72
+ <area shape="RECT" coords="29,5,109,53" href="../../classes/Comparable.html" alt="Comparable">
73
+ <area shape="RECT" coords="60,204,140,252" href="../../classes/LongMath/CacheKey.html" alt="CacheKey">
74
+ <area shape="RECT" coords="56,101,184,149" href="../../classes/LongDecimalRoundingMode/RoundingModeClass.html" alt="RoundingModeClass">
75
+ <area shape="RECT" coords="201,204,319,252" href="../../classes/LongDecimalBase.html" alt="LongDecimalBase">
76
+ <area shape="RECT" coords="139,300,253,348" href="../../classes/LongDecimalQuot.html" alt="LongDecimalQuot">
77
+ <area shape="RECT" coords="277,300,371,348" href="../../classes/LongDecimal.html" alt="LongDecimal">
78
+ <area shape="RECT" coords="235,101,307,149" href="../../classes/Numeric.html" alt="Numeric">
79
+ <area shape="RECT" coords="133,5,205,53" href="../../classes/Rational.html" alt="Rational">
80
+ <area shape="RECT" coords="49,171,177,263" href="../../classes/LongMath.html" alt="LongMath">
81
+ <area shape="RECT" coords="45,68,221,160" href="../../classes/LongDecimalRoundingMode.html" alt="LongDecimalRoundingMode">
82
+ </map>
83
+ <img src="../../dot/f_0.png" usemap="#map" border=0 alt="TopLevel">
84
+ </div>
85
+
86
+ <div id="description">
87
+ <p>
88
+ long-decimal.rb &#8212; Arbitrary precision decimals with fixed decimal
89
+ point
90
+ </p>
91
+ <p>
92
+ CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/lib/long-decimal.rb,v
93
+ 1.33 2006/04/11 19:03:22 bk1 Exp $ CVS-Label: $Name: ALPHA_01_00 $ Author:
94
+ $Author: bk1 $ (Karl Brodowsky)
95
+ </p>
96
+
97
+ </div>
98
+
99
+ <div id="requires-list">
100
+ <h3 class="section-bar">Required files</h3>
101
+
102
+ <div class="name-list">
103
+ complex&nbsp;&nbsp;
104
+ rational&nbsp;&nbsp;
105
+ bigdecimal&nbsp;&nbsp;
106
+ </div>
107
+ </div>
108
+
109
+ </div>
110
+
111
+ <div id="method-list">
112
+ <h3 class="section-bar">Methods</h3>
113
+
114
+ <div class="name-list">
115
+ <a href="#M000001">LongDecimal</a>&nbsp;&nbsp;
116
+ <a href="#M000002">LongDecimalQuot</a>&nbsp;&nbsp;
117
+ </div>
118
+ </div>
119
+
120
+ </div>
121
+
122
+
123
+ <!-- if includes -->
124
+
125
+ <div id="section">
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+ <!-- if method_list -->
135
+ <div id="methods">
136
+ <h3 class="section-bar">Public Instance methods</h3>
137
+
138
+ <div id="method-M000001" class="method-detail">
139
+ <a name="M000001"></a>
140
+
141
+ <div class="method-heading">
142
+ <a href="long-decimal_rb.src/M000001.html" target="Code" class="method-signature"
143
+ onclick="popupCode('long-decimal_rb.src/M000001.html');return false;">
144
+ <span class="method-name">LongDecimal</span><span class="method-args">(a, b = 0)</span>
145
+ </a>
146
+ </div>
147
+
148
+ <div class="method-description">
149
+ <p>
150
+ Creates a <a href="../../classes/LongDecimal.html">LongDecimal</a> number.
151
+ <tt>a</tt> and <tt>b</tt> should be <a
152
+ href="../../classes/Numeric.html">Numeric</a>.
153
+ </p>
154
+ </div>
155
+ </div>
156
+
157
+ <div id="method-M000002" class="method-detail">
158
+ <a name="M000002"></a>
159
+
160
+ <div class="method-heading">
161
+ <a href="long-decimal_rb.src/M000002.html" target="Code" class="method-signature"
162
+ onclick="popupCode('long-decimal_rb.src/M000002.html');return false;">
163
+ <span class="method-name">LongDecimalQuot</span><span class="method-args">(first, second)</span>
164
+ </a>
165
+ </div>
166
+
167
+ <div class="method-description">
168
+ <p>
169
+ construct a <a
170
+ href="../../classes/LongDecimalQuot.html">LongDecimalQuot</a> from the
171
+ given parameters 1st case: both are LongDecimals 2nd case: first is <a
172
+ href="../../classes/Rational.html">Rational</a>, second is scale
173
+ </p>
174
+ </div>
175
+ </div>
176
+
177
+
178
+ </div>
179
+
180
+
181
+ </div>
182
+
183
+
184
+ <div id="validator-badges">
185
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
186
+ </div>
187
+
188
+ </body>
189
+ </html>