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