long-decimal 0.00.21 → 0.00.22
Sign up to get free protection for your applications and to get access to all the features.
- data/README +23 -16
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/doc/classes/LongDecimal.html +343 -343
- data/doc/classes/LongDecimal.src/M000036.html +4 -4
- data/doc/classes/LongDecimal.src/M000037.html +4 -4
- data/doc/classes/LongDecimal.src/M000038.html +4 -4
- data/doc/classes/LongDecimal.src/M000039.html +4 -4
- data/doc/classes/LongDecimal.src/M000040.html +4 -6
- data/doc/classes/LongDecimal.src/M000041.html +4 -106
- data/doc/classes/LongDecimal.src/M000042.html +6 -21
- data/doc/classes/LongDecimal.src/M000043.html +105 -10
- data/doc/classes/LongDecimal.src/M000044.html +17 -23
- data/doc/classes/LongDecimal.src/M000045.html +10 -18
- data/doc/classes/LongDecimal.src/M000046.html +27 -4
- data/doc/classes/LongDecimal.src/M000047.html +17 -13
- data/doc/classes/LongDecimal.src/M000048.html +4 -28
- data/doc/classes/LongDecimal.src/M000049.html +15 -4
- data/doc/classes/LongDecimal.src/M000050.html +26 -6
- data/doc/classes/LongDecimal.src/M000051.html +4 -6
- data/doc/classes/LongDecimal.src/M000052.html +8 -4
- data/doc/classes/LongDecimal.src/M000053.html +6 -15
- data/doc/classes/LongDecimal.src/M000054.html +4 -7
- data/doc/classes/LongDecimal.src/M000055.html +15 -4
- data/doc/classes/LongDecimal.src/M000056.html +6 -14
- data/doc/classes/LongDecimal.src/M000057.html +4 -13
- data/doc/classes/LongDecimal.src/M000058.html +15 -4
- data/doc/classes/LongDecimal.src/M000059.html +13 -4
- data/doc/classes/LongDecimal.src/M000060.html +4 -4
- data/doc/classes/LongDecimal.src/M000062.html +4 -5
- data/doc/classes/LongDecimal.src/M000063.html +5 -4
- data/doc/classes/LongDecimal.src/M000064.html +5 -8
- data/doc/classes/LongDecimal.src/M000065.html +4 -9
- data/doc/classes/LongDecimal.src/M000066.html +6 -7
- data/doc/classes/LongDecimal.src/M000067.html +6 -6
- data/doc/classes/LongDecimal.src/M000068.html +9 -4
- data/doc/classes/LongDecimal.src/M000069.html +7 -13
- data/doc/classes/LongDecimal.src/M000070.html +4 -9
- data/doc/classes/LongDecimal.src/M000071.html +13 -7
- data/doc/classes/LongDecimal.src/M000072.html +7 -18
- data/doc/classes/LongDecimal.src/M000073.html +8 -7
- data/doc/classes/LongDecimal.src/M000074.html +20 -5
- data/doc/classes/LongDecimal.src/M000075.html +7 -8
- data/doc/classes/LongDecimal.src/M000076.html +5 -9
- data/doc/classes/LongDecimal.src/M000077.html +5 -5
- data/doc/classes/LongDecimal.src/M000078.html +9 -4
- data/doc/classes/LongDecimal.src/M000079.html +8 -6
- data/doc/classes/LongDecimal.src/M000080.html +4 -7
- data/doc/classes/LongDecimal.src/M000081.html +7 -4
- data/doc/classes/LongDecimal.src/M000082.html +7 -4
- data/doc/classes/LongDecimal.src/M000083.html +4 -9
- data/doc/classes/LongDecimal.src/M000084.html +4 -9
- data/doc/classes/LongDecimal.src/M000085.html +9 -5
- data/doc/classes/LongDecimal.src/M000086.html +7 -7
- data/doc/classes/LongDecimal.src/M000087.html +5 -4
- data/doc/classes/LongDecimal.src/M000088.html +9 -4
- data/doc/classes/LongDecimal.src/M000089.html +4 -4
- data/doc/classes/LongDecimal.src/M000090.html +4 -4
- data/doc/classes/LongDecimal.src/M000091.html +4 -59
- data/doc/classes/LongDecimal.src/M000092.html +4 -4
- data/doc/classes/LongDecimal.src/M000093.html +59 -4
- data/doc/classes/LongDecimal.src/M000094.html +4 -5
- data/doc/classes/LongDecimal.src/M000095.html +4 -4
- data/doc/classes/LongDecimal.src/M000098.html +5 -4
- data/doc/classes/LongDecimal.src/M000099.html +5 -4
- data/doc/classes/LongDecimal.src/M000100.html +4 -4
- data/doc/classes/LongDecimal.src/M000101.html +4 -4
- data/doc/classes/LongDecimalBase.html +53 -53
- data/doc/classes/LongDecimalBase.src/M000107.html +4 -4
- 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 -5
- data/doc/classes/LongDecimalBase.src/M000112.html +9 -9
- data/doc/classes/LongDecimalBase.src/M000115.html +23 -0
- data/doc/classes/LongDecimalQuot.html +174 -133
- data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000004.html +2 -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 +6 -5
- data/doc/classes/LongDecimalQuot.src/M000008.html +5 -4
- data/doc/classes/LongDecimalQuot.src/M000009.html +4 -4
- data/doc/classes/LongDecimalQuot.src/M000010.html +4 -4
- data/doc/classes/LongDecimalQuot.src/M000011.html +4 -4
- data/doc/classes/LongDecimalQuot.src/M000012.html +4 -4
- data/doc/classes/LongDecimalQuot.src/M000013.html +7 -4
- data/doc/classes/LongDecimalQuot.src/M000014.html +5 -8
- data/doc/classes/LongDecimalQuot.src/M000015.html +5 -9
- data/doc/classes/LongDecimalQuot.src/M000016.html +6 -7
- data/doc/classes/LongDecimalQuot.src/M000017.html +4 -4
- data/doc/classes/LongDecimalQuot.src/M000018.html +4 -4
- data/doc/classes/LongDecimalQuot.src/M000019.html +6 -18
- data/doc/classes/LongDecimalQuot.src/M000020.html +8 -7
- data/doc/classes/LongDecimalQuot.src/M000021.html +21 -5
- data/doc/classes/LongDecimalQuot.src/M000022.html +8 -4
- data/doc/classes/LongDecimalQuot.src/M000023.html +5 -96
- data/doc/classes/LongDecimalQuot.src/M000024.html +4 -38
- data/doc/classes/LongDecimalQuot.src/M000025.html +96 -4
- data/doc/classes/LongDecimalQuot.src/M000026.html +38 -4
- data/doc/classes/LongDecimalQuot.src/M000027.html +4 -4
- data/doc/classes/LongDecimalQuot.src/M000028.html +4 -4
- data/doc/classes/LongDecimalQuot.src/M000029.html +4 -4
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +10 -10
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000148.html +22 -0
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000149.html +18 -0
- data/doc/classes/LongMath.html +159 -161
- data/doc/classes/LongMath.src/M000118.html +5 -4
- data/doc/classes/LongMath.src/M000119.html +4 -5
- data/doc/classes/LongMath.src/M000120.html +4 -4
- data/doc/classes/LongMath.src/M000121.html +5 -18
- data/doc/classes/LongMath.src/M000122.html +4 -18
- data/doc/classes/LongMath.src/M000123.html +18 -5
- data/doc/classes/LongMath.src/M000124.html +16 -27
- data/doc/classes/LongMath.src/M000125.html +4 -4
- data/doc/classes/LongMath.src/M000126.html +17 -45
- data/doc/classes/LongMath.src/M000127.html +5 -21
- data/doc/classes/LongMath.src/M000128.html +50 -29
- data/doc/classes/LongMath.src/M000129.html +21 -6
- data/doc/classes/LongMath.src/M000130.html +31 -28
- data/doc/classes/LongMath.src/M000131.html +6 -48
- data/doc/classes/LongMath.src/M000132.html +33 -8
- data/doc/classes/LongMath.src/M000133.html +51 -4
- data/doc/classes/LongMath.src/M000134.html +7 -4
- data/doc/classes/LongMath.src/M000135.html +4 -64
- data/doc/classes/LongMath.src/M000136.html +4 -43
- data/doc/classes/LongMath.src/M000137.html +64 -4
- data/doc/classes/LongMath.src/M000138.html +43 -4
- data/doc/classes/LongMath.src/M000139.html +4 -7
- data/doc/classes/LongMath.src/M000140.html +4 -20
- data/doc/classes/LongMath.src/M000141.html +4 -18
- data/doc/classes/LongMath.src/M000142.html +11 -34
- data/doc/classes/LongMath.src/M000143.html +13 -253
- data/doc/classes/LongMath.src/M000144.html +40 -16
- data/doc/classes/LongMath.src/M000145.html +227 -0
- data/doc/classes/LongMath.src/M000146.html +33 -0
- data/doc/classes/LongMath/CacheKey.html +6 -6
- data/doc/classes/LongMath/CacheKey.src/M000147.html +36 -0
- data/doc/classes/Numeric.html +10 -10
- data/doc/classes/Numeric.src/M000103.html +18 -0
- data/doc/classes/Rational.html +5 -5
- data/doc/classes/Rational.src/M000104.html +23 -0
- data/doc/created.rid +1 -1
- 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 +145 -143
- data/lib/long-decimal.rb +52 -71
- data/test/testlongdecimal.rb +218 -449
- data/test/testlongdeclib.rb +485 -0
- data/test/testrandom.rb +75 -0
- data/version.rb +1 -1
- metadata +12 -3
- data/doc/files/lib/long-decimal_rb.html +0 -189
data/doc/classes/Rational.html
CHANGED
@@ -101,7 +101,7 @@
|
|
101
101
|
<h3 class="section-bar">Methods</h3>
|
102
102
|
|
103
103
|
<div class="name-list">
|
104
|
-
<a href="#
|
104
|
+
<a href="#M000106">to_ld</a>
|
105
105
|
</div>
|
106
106
|
</div>
|
107
107
|
|
@@ -123,12 +123,12 @@
|
|
123
123
|
<div id="methods">
|
124
124
|
<h3 class="section-bar">Public Instance methods</h3>
|
125
125
|
|
126
|
-
<div id="method-
|
127
|
-
<a name="
|
126
|
+
<div id="method-M000106" class="method-detail">
|
127
|
+
<a name="M000106"></a>
|
128
128
|
|
129
129
|
<div class="method-heading">
|
130
|
-
<a href="Rational.src/
|
131
|
-
onclick="popupCode('Rational.src/
|
130
|
+
<a href="Rational.src/M000106.html" target="Code" class="method-signature"
|
131
|
+
onclick="popupCode('Rational.src/M000106.html');return false;">
|
132
132
|
<span class="method-name">to_ld</span><span class="method-args">(prec = nil, mode = LongDecimal::ROUND_HALF_UP)</span>
|
133
133
|
</a>
|
134
134
|
</div>
|
@@ -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 1731</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>
|
data/doc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Sat Apr 08 00:49:02 CEST 2006
|
@@ -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
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1709</span>
|
14
14
|
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongDecimal</span>(<span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span> = <span class="ruby-value">0</span>)
|
15
15
|
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&&</span> (<span class="ruby-identifier">a</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>) <span class="ruby-keyword kw">then</span>
|
16
16
|
<span class="ruby-identifier">a</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
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 1722</span>
|
14
14
|
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongDecimalQuot</span>(<span class="ruby-identifier">first</span>, <span class="ruby-identifier">second</span>)
|
15
15
|
<span class="ruby-constant">LongDecimalQuot</span>.<span class="ruby-identifier">new!</span>(<span class="ruby-identifier">first</span>, <span class="ruby-identifier">second</span>)
|
16
16
|
<span class="ruby-keyword kw">end</span></pre>
|
data/doc/fr_method_index.html
CHANGED
@@ -20,155 +20,157 @@
|
|
20
20
|
<div id="index">
|
21
21
|
<h1 class="section-bar">Methods</h1>
|
22
22
|
<div id="index-entries">
|
23
|
-
<a href="classes/
|
24
|
-
<a href="classes/
|
25
|
-
<a href="classes/LongDecimal.html#
|
26
|
-
<a href="classes/
|
27
|
-
<a href="classes/
|
28
|
-
<a href="classes/
|
29
|
-
<a href="classes/
|
30
|
-
<a href="classes/
|
31
|
-
<a href="classes/
|
32
|
-
<a href="classes/LongDecimalBase.html#
|
33
|
-
<a href="classes/
|
34
|
-
<a href="classes/
|
35
|
-
<a href="classes/
|
36
|
-
<a href="classes/
|
37
|
-
<a href="classes/LongDecimalQuot.html#
|
38
|
-
<a href="classes/LongDecimal.html#
|
39
|
-
<a href="classes/LongDecimal.html#
|
40
|
-
<a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#
|
41
|
-
<a href="classes/
|
42
|
-
<a href="classes/
|
43
|
-
<a href="classes/LongDecimal.html#
|
44
|
-
<a href="classes/LongDecimalQuot.html#
|
45
|
-
<a href="classes/LongDecimal.html#
|
46
|
-
<a href="classes/LongDecimal.html#
|
23
|
+
<a href="classes/LongDecimal.html#M000076">% (LongDecimal)</a><br />
|
24
|
+
<a href="classes/LongDecimalQuot.html#M000023">% (LongDecimalQuot)</a><br />
|
25
|
+
<a href="classes/LongDecimal.html#M000077">& (LongDecimal)</a><br />
|
26
|
+
<a href="classes/LongDecimalQuot.html#M000019">* (LongDecimalQuot)</a><br />
|
27
|
+
<a href="classes/LongDecimal.html#M000069">* (LongDecimal)</a><br />
|
28
|
+
<a href="classes/LongDecimal.html#M000074">** (LongDecimal)</a><br />
|
29
|
+
<a href="classes/LongDecimalQuot.html#M000021">** (LongDecimalQuot)</a><br />
|
30
|
+
<a href="classes/LongDecimalQuot.html#M000017">+ (LongDecimalQuot)</a><br />
|
31
|
+
<a href="classes/LongDecimal.html#M000067">+ (LongDecimal)</a><br />
|
32
|
+
<a href="classes/LongDecimalBase.html#M000110">+@ (LongDecimalBase)</a><br />
|
33
|
+
<a href="classes/LongDecimalQuot.html#M000018">- (LongDecimalQuot)</a><br />
|
34
|
+
<a href="classes/LongDecimal.html#M000068">- (LongDecimal)</a><br />
|
35
|
+
<a href="classes/LongDecimalQuot.html#M000016">-@ (LongDecimalQuot)</a><br />
|
36
|
+
<a href="classes/LongDecimal.html#M000066">-@ (LongDecimal)</a><br />
|
37
|
+
<a href="classes/LongDecimalQuot.html#M000020">/ (LongDecimalQuot)</a><br />
|
38
|
+
<a href="classes/LongDecimal.html#M000073">/ (LongDecimal)</a><br />
|
39
|
+
<a href="classes/LongDecimal.html#M000081"><< (LongDecimal)</a><br />
|
40
|
+
<a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000150"><=> (LongDecimalRoundingMode::RoundingModeClass)</a><br />
|
41
|
+
<a href="classes/LongDecimalBase.html#M000115"><=> (LongDecimalBase)</a><br />
|
42
|
+
<a href="classes/LongMath/CacheKey.html#M000149"><=> (LongMath::CacheKey)</a><br />
|
43
|
+
<a href="classes/LongDecimal.html#M000098">== (LongDecimal)</a><br />
|
44
|
+
<a href="classes/LongDecimalQuot.html#M000027">== (LongDecimalQuot)</a><br />
|
45
|
+
<a href="classes/LongDecimal.html#M000099">=== (LongDecimal)</a><br />
|
46
|
+
<a href="classes/LongDecimal.html#M000082">>> (LongDecimal)</a><br />
|
47
47
|
<a href="files/lib/long-decimal_rb.html#M000001">LongDecimal (lib/long-decimal.rb)</a><br />
|
48
48
|
<a href="files/lib/long-decimal_rb.html#M000002">LongDecimalQuot (lib/long-decimal.rb)</a><br />
|
49
|
-
<a href="classes/LongDecimal.html#
|
50
|
-
<a href="classes/LongDecimal.html#
|
51
|
-
<a href="classes/LongDecimal.html#
|
52
|
-
<a href="classes/LongDecimalQuot.html#
|
53
|
-
<a href="classes/LongDecimalBase.html#
|
54
|
-
<a href="classes/LongDecimal.html#
|
55
|
-
<a href="classes/LongMath.html#
|
56
|
-
<a href="classes/LongMath.html#
|
57
|
-
<a href="classes/LongMath.html#
|
58
|
-
<a href="classes/LongMath.html#
|
59
|
-
<a href="classes/LongMath.html#
|
60
|
-
<a href="classes/LongMath.html#
|
61
|
-
<a href="classes/
|
62
|
-
<a href="classes/
|
63
|
-
<a href="classes/LongDecimalBase.html#
|
64
|
-
<a href="classes/LongDecimal.html#
|
65
|
-
<a href="classes/LongDecimalQuot.html#
|
66
|
-
<a href="classes/LongDecimal.html#M000052">denominator (LongDecimal)</a><br />
|
49
|
+
<a href="classes/LongDecimal.html#M000083">[] (LongDecimal)</a><br />
|
50
|
+
<a href="classes/LongDecimal.html#M000079">^ (LongDecimal)</a><br />
|
51
|
+
<a href="classes/LongDecimal.html#M000092">abs (LongDecimal)</a><br />
|
52
|
+
<a href="classes/LongDecimalQuot.html#M000024">abs (LongDecimalQuot)</a><br />
|
53
|
+
<a href="classes/LongDecimalBase.html#M000114">abs2 (LongDecimalBase)</a><br />
|
54
|
+
<a href="classes/LongDecimal.html#M000059">anti_equalize_scale (LongDecimal)</a><br />
|
55
|
+
<a href="classes/LongMath.html#M000146">calc_iprec_for_power (LongMath)</a><br />
|
56
|
+
<a href="classes/LongMath.html#M000119">check_is_int (LongMath)</a><br />
|
57
|
+
<a href="classes/LongMath.html#M000120">check_is_ld (LongMath)</a><br />
|
58
|
+
<a href="classes/LongMath.html#M000122">check_is_mode (LongMath)</a><br />
|
59
|
+
<a href="classes/LongMath.html#M000121">check_is_prec (LongMath)</a><br />
|
60
|
+
<a href="classes/LongMath.html#M000118">check_word_len (LongMath)</a><br />
|
61
|
+
<a href="classes/LongDecimalQuot.html#M000026">coerce (LongDecimalQuot)</a><br />
|
62
|
+
<a href="classes/LongDecimal.html#M000093">coerce (LongDecimal)</a><br />
|
63
|
+
<a href="classes/LongDecimalBase.html#M000109">dec (LongDecimalBase)</a><br />
|
64
|
+
<a href="classes/LongDecimal.html#M000064">dec! (LongDecimal)</a><br />
|
65
|
+
<a href="classes/LongDecimalQuot.html#M000015">dec! (LongDecimalQuot)</a><br />
|
67
66
|
<a href="classes/LongDecimalQuot.html#M000006">denominator (LongDecimalQuot)</a><br />
|
68
|
-
<a href="classes/LongDecimal.html#
|
69
|
-
<a href="classes/LongDecimal.html#
|
70
|
-
<a href="classes/LongDecimal.html#
|
71
|
-
<a href="classes/
|
72
|
-
<a href="classes/
|
73
|
-
<a href="classes/
|
74
|
-
<a href="classes/LongMath.html#M000134">
|
75
|
-
<a href="classes/LongMath.html#
|
76
|
-
<a href="classes/LongMath.html#M000135">
|
77
|
-
<a href="classes/LongMath.html#
|
78
|
-
<a href="classes/LongMath.html#
|
79
|
-
<a href="classes/
|
80
|
-
<a href="classes/
|
81
|
-
<a href="classes/
|
82
|
-
<a href="classes/
|
83
|
-
<a href="classes/
|
84
|
-
<a href="classes/
|
85
|
-
<a href="classes/
|
86
|
-
<a href="classes/
|
87
|
-
<a href="classes/
|
88
|
-
<a href="classes/LongMath.html#
|
89
|
-
<a href="classes/LongDecimal.html#
|
90
|
-
<a href="classes/
|
91
|
-
<a href="classes/
|
92
|
-
<a href="classes/LongDecimal.html#
|
93
|
-
<a href="classes/
|
94
|
-
<a href="classes/LongMath.html#
|
95
|
-
<a href="classes/LongMath.html#
|
96
|
-
<a href="classes/LongMath.html#
|
97
|
-
<a href="classes/LongMath.html#
|
98
|
-
<a href="classes/LongMath.html#
|
99
|
-
<a href="classes/
|
100
|
-
<a href="classes/LongDecimal.html#
|
101
|
-
<a href="classes/LongDecimal.html#M000085">
|
102
|
-
<a href="classes/LongDecimal.html#
|
103
|
-
<a href="classes/LongDecimal.html#M000086">
|
104
|
-
<a href="classes/
|
105
|
-
<a href="classes/LongMath.html#
|
106
|
-
<a href="classes/
|
67
|
+
<a href="classes/LongDecimal.html#M000054">denominator (LongDecimal)</a><br />
|
68
|
+
<a href="classes/LongDecimal.html#M000070">divide (LongDecimal)</a><br />
|
69
|
+
<a href="classes/LongDecimal.html#M000071">divide_s (LongDecimal)</a><br />
|
70
|
+
<a href="classes/LongDecimal.html#M000075">divmod (LongDecimal)</a><br />
|
71
|
+
<a href="classes/LongDecimalQuot.html#M000022">divmod (LongDecimalQuot)</a><br />
|
72
|
+
<a href="classes/LongDecimal.html#M000058">equalize_scale (LongDecimal)</a><br />
|
73
|
+
<a href="classes/LongMath.html#M000134">exp (LongMath)</a><br />
|
74
|
+
<a href="classes/LongMath.html#M000136">exp10 (LongMath)</a><br />
|
75
|
+
<a href="classes/LongMath.html#M000135">exp2 (LongMath)</a><br />
|
76
|
+
<a href="classes/LongMath.html#M000137">exp_internal (LongMath)</a><br />
|
77
|
+
<a href="classes/LongMath.html#M000138">exp_raw (LongMath)</a><br />
|
78
|
+
<a href="classes/LongMath.html#M000129">gcd_with_high_power (LongMath)</a><br />
|
79
|
+
<a href="classes/LongDecimal.html#M000102">hash (LongDecimal)</a><br />
|
80
|
+
<a href="classes/LongDecimalQuot.html#M000034">hash (LongDecimalQuot)</a><br />
|
81
|
+
<a href="classes/LongDecimalRoundingMode/RoundingModeClass.html#M000151">hash (LongDecimalRoundingMode::RoundingModeClass)</a><br />
|
82
|
+
<a href="classes/LongDecimalBase.html#M000108">inc (LongDecimalBase)</a><br />
|
83
|
+
<a href="classes/LongDecimal.html#M000063">inc! (LongDecimal)</a><br />
|
84
|
+
<a href="classes/LongDecimalQuot.html#M000014">inc! (LongDecimalQuot)</a><br />
|
85
|
+
<a href="classes/LongDecimal.html#M000103">inspect (LongDecimal)</a><br />
|
86
|
+
<a href="classes/LongDecimalQuot.html#M000035">inspect (LongDecimalQuot)</a><br />
|
87
|
+
<a href="classes/LongMath.html#M000132">int_digits10 (LongMath)</a><br />
|
88
|
+
<a href="classes/LongDecimal.html#M000057">int_digits10 (LongDecimal)</a><br />
|
89
|
+
<a href="classes/LongDecimal.html#M000055">int_digits2 (LongDecimal)</a><br />
|
90
|
+
<a href="classes/LongDecimalBase.html#M000113">inverse (LongDecimalBase)</a><br />
|
91
|
+
<a href="classes/LongDecimal.html#M000094">is_int? (LongDecimal)</a><br />
|
92
|
+
<a href="classes/LongDecimalQuot.html#M000030">is_int? (LongDecimalQuot)</a><br />
|
93
|
+
<a href="classes/LongMath.html#M000141">log (LongMath)</a><br />
|
94
|
+
<a href="classes/LongMath.html#M000142">log10 (LongMath)</a><br />
|
95
|
+
<a href="classes/LongMath.html#M000143">log2 (LongMath)</a><br />
|
96
|
+
<a href="classes/LongMath.html#M000144">log_internal (LongMath)</a><br />
|
97
|
+
<a href="classes/LongMath.html#M000145">log_raw (LongMath)</a><br />
|
98
|
+
<a href="classes/LongMath.html#M000124">merge_from_words (LongMath)</a><br />
|
99
|
+
<a href="classes/LongDecimal.html#M000041">minus_one! (LongDecimal)</a><br />
|
100
|
+
<a href="classes/LongDecimal.html#M000085">move_point_left (LongDecimal)</a><br />
|
101
|
+
<a href="classes/LongDecimal.html#M000087">move_point_left_int (LongDecimal)</a><br />
|
102
|
+
<a href="classes/LongDecimal.html#M000086">move_point_right (LongDecimal)</a><br />
|
103
|
+
<a href="classes/LongDecimal.html#M000088">move_point_right_int (LongDecimal)</a><br />
|
104
|
+
<a href="classes/LongMath.html#M000131">multiplicity_of_10 (LongMath)</a><br />
|
105
|
+
<a href="classes/LongMath.html#M000130">multiplicity_of_factor (LongMath)</a><br />
|
107
106
|
<a href="classes/LongDecimalQuot.html#M000004">new (LongDecimalQuot)</a><br />
|
108
|
-
<a href="classes/LongDecimal.html#
|
107
|
+
<a href="classes/LongDecimal.html#M000043">new (LongDecimal)</a><br />
|
108
|
+
<a href="classes/LongDecimal.html#M000036">new! (LongDecimal)</a><br />
|
109
109
|
<a href="classes/LongDecimalQuot.html#M000003">new! (LongDecimalQuot)</a><br />
|
110
|
-
<a href="classes/LongDecimal.html#
|
110
|
+
<a href="classes/LongDecimal.html#M000061">next (LongDecimal)</a><br />
|
111
111
|
<a href="classes/LongDecimalQuot.html#M000005">numerator (LongDecimalQuot)</a><br />
|
112
|
-
<a href="classes/LongDecimal.html#
|
113
|
-
<a href="classes/LongDecimal.html#
|
114
|
-
<a href="classes/LongDecimalQuot.html#
|
115
|
-
<a href="classes/Numeric.html#
|
116
|
-
<a href="classes/LongMath.html#
|
117
|
-
<a href="classes/LongMath.html#
|
118
|
-
<a href="classes/LongMath.html#
|
119
|
-
<a href="classes/LongDecimal.html#
|
120
|
-
<a href="classes/LongDecimal.html#
|
121
|
-
<a href="classes/LongDecimal.html#
|
122
|
-
<a href="classes/LongDecimalBase.html#
|
123
|
-
<a href="classes/LongDecimal.html#
|
124
|
-
<a href="classes/LongDecimalQuot.html#
|
125
|
-
<a href="classes/LongDecimal.html#
|
126
|
-
<a href="classes/
|
127
|
-
<a href="classes/
|
128
|
-
<a href="classes/LongDecimalBase.html#
|
129
|
-
<a href="classes/
|
130
|
-
<a href="classes/
|
131
|
-
<a href="classes/
|
132
|
-
<a href="classes/
|
133
|
-
<a href="classes/
|
134
|
-
<a href="classes/LongDecimalQuot.html#
|
135
|
-
<a href="classes/LongDecimal.html#
|
136
|
-
<a href="classes/
|
137
|
-
<a href="classes/
|
138
|
-
<a href="classes/
|
139
|
-
<a href="classes/
|
140
|
-
<a href="classes/
|
141
|
-
<a href="classes/
|
142
|
-
<a href="classes/
|
143
|
-
<a href="classes/LongMath.html#
|
144
|
-
<a href="classes/LongMath.html#M000125">
|
145
|
-
<a href="classes/LongMath.html#M000126">
|
146
|
-
<a href="classes/
|
147
|
-
<a href="classes/
|
148
|
-
<a href="classes/
|
149
|
-
<a href="classes/LongDecimal.html#
|
150
|
-
<a href="classes/LongDecimal.html#
|
151
|
-
<a href="classes/
|
152
|
-
<a href="classes/LongDecimal.html#
|
153
|
-
<a href="classes/LongDecimalQuot.html#
|
154
|
-
<a href="classes/LongDecimalQuot.html#
|
155
|
-
<a href="classes/LongDecimal.html#
|
156
|
-
<a href="classes/LongDecimalQuot.html#M000011">
|
157
|
-
<a href="classes/LongDecimal.html#
|
158
|
-
<a href="classes/
|
159
|
-
<a href="classes/
|
160
|
-
<a href="classes/
|
161
|
-
<a href="classes/LongDecimalQuot.html#
|
162
|
-
<a href="classes/
|
163
|
-
<a href="classes/
|
164
|
-
<a href="classes/LongDecimal.html#M000047">
|
165
|
-
<a href="classes/LongDecimal.html#
|
166
|
-
<a href="classes/LongDecimal.html#
|
167
|
-
<a href="classes/LongDecimal.html#
|
168
|
-
<a href="classes/
|
169
|
-
<a href="classes/LongDecimal.html#
|
170
|
-
<a href="classes/LongDecimal.html#
|
171
|
-
<a href="classes/
|
112
|
+
<a href="classes/LongDecimal.html#M000038">one! (LongDecimal)</a><br />
|
113
|
+
<a href="classes/LongDecimal.html#M000101">one? (LongDecimal)</a><br />
|
114
|
+
<a href="classes/LongDecimalQuot.html#M000029">one? (LongDecimalQuot)</a><br />
|
115
|
+
<a href="classes/Numeric.html#M000105">one? (Numeric)</a><br />
|
116
|
+
<a href="classes/LongMath.html#M000133">pi (LongMath)</a><br />
|
117
|
+
<a href="classes/LongMath.html#M000147">power (LongMath)</a><br />
|
118
|
+
<a href="classes/LongMath.html#M000148">power_internal (LongMath)</a><br />
|
119
|
+
<a href="classes/LongDecimal.html#M000042">power_of_ten! (LongDecimal)</a><br />
|
120
|
+
<a href="classes/LongDecimal.html#M000062">pred (LongDecimal)</a><br />
|
121
|
+
<a href="classes/LongDecimal.html#M000072">rdiv (LongDecimal)</a><br />
|
122
|
+
<a href="classes/LongDecimalBase.html#M000112">reciprocal (LongDecimalBase)</a><br />
|
123
|
+
<a href="classes/LongDecimal.html#M000046">round_to_scale (LongDecimal)</a><br />
|
124
|
+
<a href="classes/LongDecimalQuot.html#M000025">round_to_scale (LongDecimalQuot)</a><br />
|
125
|
+
<a href="classes/LongDecimal.html#M000045">round_trailing_zeros (LongDecimal)</a><br />
|
126
|
+
<a href="classes/LongDecimalQuot.html#M000007">scale= (LongDecimalQuot)</a><br />
|
127
|
+
<a href="classes/LongDecimal.html#M000044">scale= (LongDecimal)</a><br />
|
128
|
+
<a href="classes/LongDecimalBase.html#M000117">scale_equal (LongDecimalBase)</a><br />
|
129
|
+
<a href="classes/LongDecimalBase.html#M000116">scale_ufo (LongDecimalBase)</a><br />
|
130
|
+
<a href="classes/LongDecimal.html#M000095">sgn (LongDecimal)</a><br />
|
131
|
+
<a href="classes/LongDecimalQuot.html#M000031">sgn (LongDecimalQuot)</a><br />
|
132
|
+
<a href="classes/LongDecimal.html#M000097">sign (LongDecimal)</a><br />
|
133
|
+
<a href="classes/LongDecimalQuot.html#M000033">sign (LongDecimalQuot)</a><br />
|
134
|
+
<a href="classes/LongDecimalQuot.html#M000032">signum (LongDecimalQuot)</a><br />
|
135
|
+
<a href="classes/LongDecimal.html#M000096">signum (LongDecimal)</a><br />
|
136
|
+
<a href="classes/LongDecimalQuot.html#M000013">sint_digits10 (LongDecimalQuot)</a><br />
|
137
|
+
<a href="classes/LongDecimal.html#M000056">sint_digits10 (LongDecimal)</a><br />
|
138
|
+
<a href="classes/LongDecimal.html#M000084">size (LongDecimal)</a><br />
|
139
|
+
<a href="classes/LongMath.html#M000123">split_to_words (LongMath)</a><br />
|
140
|
+
<a href="classes/LongDecimal.html#M000090">sqrt (LongDecimal)</a><br />
|
141
|
+
<a href="classes/LongMath.html#M000139">sqrt (LongMath)</a><br />
|
142
|
+
<a href="classes/LongDecimal.html#M000091">sqrt_with_remainder (LongDecimal)</a><br />
|
143
|
+
<a href="classes/LongMath.html#M000140">sqrt_with_remainder (LongMath)</a><br />
|
144
|
+
<a href="classes/LongMath.html#M000125">sqrtb (LongMath)</a><br />
|
145
|
+
<a href="classes/LongMath.html#M000126">sqrtb_with_remainder (LongMath)</a><br />
|
146
|
+
<a href="classes/LongMath.html#M000127">sqrtw (LongMath)</a><br />
|
147
|
+
<a href="classes/LongMath.html#M000128">sqrtw_with_remainder (LongMath)</a><br />
|
148
|
+
<a href="classes/LongDecimalBase.html#M000111">square (LongDecimalBase)</a><br />
|
149
|
+
<a href="classes/LongDecimal.html#M000089">square (LongDecimal)</a><br />
|
150
|
+
<a href="classes/LongDecimal.html#M000060">succ (LongDecimal)</a><br />
|
151
|
+
<a href="classes/LongDecimal.html#M000040">ten! (LongDecimal)</a><br />
|
152
|
+
<a href="classes/LongDecimal.html#M000053">to_bd (LongDecimal)</a><br />
|
153
|
+
<a href="classes/LongDecimalQuot.html#M000010">to_bd (LongDecimalQuot)</a><br />
|
154
|
+
<a href="classes/LongDecimalQuot.html#M000009">to_f (LongDecimalQuot)</a><br />
|
155
|
+
<a href="classes/LongDecimal.html#M000050">to_f (LongDecimal)</a><br />
|
156
|
+
<a href="classes/LongDecimalQuot.html#M000011">to_i (LongDecimalQuot)</a><br />
|
157
|
+
<a href="classes/LongDecimal.html#M000051">to_i (LongDecimal)</a><br />
|
158
|
+
<a href="classes/Rational.html#M000106">to_ld (Rational)</a><br />
|
159
|
+
<a href="classes/Numeric.html#M000104">to_ld (Numeric)</a><br />
|
160
|
+
<a href="classes/LongDecimal.html#M000052">to_ld (LongDecimal)</a><br />
|
161
|
+
<a href="classes/LongDecimalQuot.html#M000012">to_ld (LongDecimalQuot)</a><br />
|
162
|
+
<a href="classes/LongDecimalBase.html#M000107">to_r (LongDecimalBase)</a><br />
|
163
|
+
<a href="classes/LongDecimalQuot.html#M000008">to_s (LongDecimalQuot)</a><br />
|
164
|
+
<a href="classes/LongDecimal.html#M000047">to_s (LongDecimal)</a><br />
|
165
|
+
<a href="classes/LongDecimal.html#M000048">to_s_10 (LongDecimal)</a><br />
|
166
|
+
<a href="classes/LongDecimal.html#M000049">to_s_internal (LongDecimal)</a><br />
|
167
|
+
<a href="classes/LongDecimal.html#M000039">two! (LongDecimal)</a><br />
|
168
|
+
<a href="classes/LongDecimal.html#M000065">unit (LongDecimal)</a><br />
|
169
|
+
<a href="classes/LongDecimal.html#M000037">zero! (LongDecimal)</a><br />
|
170
|
+
<a href="classes/LongDecimal.html#M000100">zero? (LongDecimal)</a><br />
|
171
|
+
<a href="classes/LongDecimalQuot.html#M000028">zero? (LongDecimalQuot)</a><br />
|
172
|
+
<a href="classes/LongDecimal.html#M000078">| (LongDecimal)</a><br />
|
173
|
+
<a href="classes/LongDecimal.html#M000080">~ (LongDecimal)</a><br />
|
172
174
|
</div>
|
173
175
|
</div>
|
174
176
|
</body>
|
data/lib/long-decimal.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#
|
2
2
|
# long-decimal.rb -- Arbitrary precision decimals with fixed decimal point
|
3
3
|
#
|
4
|
-
# CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/lib/long-decimal.rb,v 1.
|
5
|
-
# CVS-Label: $Name:
|
4
|
+
# CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/lib/long-decimal.rb,v 1.26 2006/04/07 22:26:08 bk1 Exp $
|
5
|
+
# CVS-Label: $Name: PRE_ALPHA_0_22 $
|
6
6
|
# Author: $Author: bk1 $ (Karl Brodowsky)
|
7
7
|
#
|
8
8
|
require "complex"
|
@@ -61,7 +61,7 @@ end # LongDecimalRoundingMode
|
|
61
61
|
# common base class for LongDecimal and LongDecimalQuot
|
62
62
|
#
|
63
63
|
class LongDecimalBase < Numeric
|
64
|
-
@RCS_ID='-$Id: long-decimal.rb,v 1.
|
64
|
+
@RCS_ID='-$Id: long-decimal.rb,v 1.26 2006/04/07 22:26:08 bk1 Exp $-'
|
65
65
|
|
66
66
|
include LongDecimalRoundingMode
|
67
67
|
|
@@ -108,7 +108,12 @@ class LongDecimalBase < Numeric
|
|
108
108
|
# calculate the multiplicative inverse
|
109
109
|
#
|
110
110
|
def reciprocal
|
111
|
-
|
111
|
+
sx = self.scale
|
112
|
+
dx = self.sint_digits10
|
113
|
+
new_scale = [ 0, 2 * dx + sx - 2].max
|
114
|
+
result = 1 / self
|
115
|
+
result.scale = new_scale
|
116
|
+
result
|
112
117
|
end
|
113
118
|
|
114
119
|
alias inverse reciprocal
|
@@ -164,7 +169,7 @@ end # class LongDecimalBase
|
|
164
169
|
# digits and the other one the position of the decimal point.
|
165
170
|
#
|
166
171
|
class LongDecimal < LongDecimalBase
|
167
|
-
@RCS_ID='-$Id: long-decimal.rb,v 1.
|
172
|
+
@RCS_ID='-$Id: long-decimal.rb,v 1.26 2006/04/07 22:26:08 bk1 Exp $-'
|
168
173
|
|
169
174
|
# MINUS_ONE = LongDecimal(-1)
|
170
175
|
# ZERO = LongDecimal(0)
|
@@ -1197,7 +1202,7 @@ end # LongDecimal
|
|
1197
1202
|
#
|
1198
1203
|
class LongDecimalQuot < LongDecimalBase
|
1199
1204
|
|
1200
|
-
@RCS_ID='-$Id: long-decimal.rb,v 1.
|
1205
|
+
@RCS_ID='-$Id: long-decimal.rb,v 1.26 2006/04/07 22:26:08 bk1 Exp $-'
|
1201
1206
|
|
1202
1207
|
#
|
1203
1208
|
# constructor
|
@@ -1217,6 +1222,7 @@ class LongDecimalQuot < LongDecimalBase
|
|
1217
1222
|
# pair of LongDecimals
|
1218
1223
|
#
|
1219
1224
|
def initialize(first, second)
|
1225
|
+
@digits10 = nil
|
1220
1226
|
if ((first.kind_of? Rational) || (first.kind_of? Integer)) && (second.kind_of? Integer) then
|
1221
1227
|
@rat = Rational(first.numerator, first.denominator)
|
1222
1228
|
@scale = second
|
@@ -1274,7 +1280,7 @@ class LongDecimalQuot < LongDecimalBase
|
|
1274
1280
|
@scale = s
|
1275
1281
|
end
|
1276
1282
|
|
1277
|
-
|
1283
|
+
# protected :scale=
|
1278
1284
|
|
1279
1285
|
#
|
1280
1286
|
# conversion to string. Based on the conversion of Rational
|
@@ -1314,11 +1320,34 @@ class LongDecimalQuot < LongDecimalBase
|
|
1314
1320
|
round_to_scale(prec, mode)
|
1315
1321
|
end
|
1316
1322
|
|
1323
|
+
#
|
1324
|
+
# number of decimal digits before the decimal point, not counting a
|
1325
|
+
# single 0. negative value, if some zeros follow immediately after
|
1326
|
+
# decimal point
|
1327
|
+
#
|
1328
|
+
# 0.000x -> -3
|
1329
|
+
# 0.00x -> -2
|
1330
|
+
# 0.0xx -> -1
|
1331
|
+
# 0.xxx -> 0
|
1332
|
+
# 1.xxx -> 1
|
1333
|
+
# 10.xxx -> 2
|
1334
|
+
# 99.xxx -> 2
|
1335
|
+
# 100.xxx -> 3
|
1336
|
+
# ...
|
1337
|
+
#
|
1338
|
+
def sint_digits10
|
1339
|
+
if (@digits10.nil?)
|
1340
|
+
@digits10 = LongMath.int_digits10(numerator.abs / denominator)
|
1341
|
+
end
|
1342
|
+
@digits10
|
1343
|
+
end
|
1344
|
+
|
1317
1345
|
#
|
1318
1346
|
# self += 1
|
1319
1347
|
#
|
1320
1348
|
def inc!
|
1321
1349
|
@rat += 1
|
1350
|
+
@digits10 = nil
|
1322
1351
|
end
|
1323
1352
|
|
1324
1353
|
#
|
@@ -1326,6 +1355,7 @@ class LongDecimalQuot < LongDecimalBase
|
|
1326
1355
|
#
|
1327
1356
|
def dec!
|
1328
1357
|
@rat -= 1
|
1358
|
+
@digits10 = nil
|
1329
1359
|
end
|
1330
1360
|
|
1331
1361
|
#
|
@@ -1768,7 +1798,7 @@ module LongMath
|
|
1768
1798
|
include Comparable
|
1769
1799
|
|
1770
1800
|
#
|
1771
|
-
# introduce some ordering for
|
1801
|
+
# introduce some ordering for cache keys
|
1772
1802
|
#
|
1773
1803
|
def <=>(o)
|
1774
1804
|
r = 0
|
@@ -1834,7 +1864,7 @@ module LongMath
|
|
1834
1864
|
def LongMath.check_cacheable(x, s="x")
|
1835
1865
|
raise TypeError, "#{s}=#{x} must be LongDecimal or Array of LongDecimal" unless (x.kind_of? LongDecimal) || (x.kind_of? Array) && (x[0].kind_of? LongDecimal)
|
1836
1866
|
end
|
1837
|
-
|
1867
|
+
|
1838
1868
|
|
1839
1869
|
#
|
1840
1870
|
# store new value in cache, if it provides an improvement of
|
@@ -1843,10 +1873,9 @@ module LongMath
|
|
1843
1873
|
def LongMath.set_cached(key, val)
|
1844
1874
|
unless key.nil? || val.nil?
|
1845
1875
|
oval = @@cache[key]
|
1846
|
-
# puts("set key=#{key}\noval=#{oval}\nval=#{val}\n")
|
1847
1876
|
unless (oval.nil?)
|
1848
|
-
|
1849
|
-
|
1877
|
+
check_cacheable(val, "val")
|
1878
|
+
check_cacheable(oval, "oval")
|
1850
1879
|
if (val.scale <= oval.scale)
|
1851
1880
|
return
|
1852
1881
|
end
|
@@ -1988,7 +2017,6 @@ module LongMath
|
|
1988
2017
|
end
|
1989
2018
|
|
1990
2019
|
#
|
1991
|
-
|
1992
2020
|
# calculate the square root of an integer using larger chunks of the
|
1993
2021
|
# number. The optional parameter n provides the size of these
|
1994
2022
|
# chunks. It is by default chosen to be 16, which is optimized for
|
@@ -2211,6 +2239,7 @@ module LongMath
|
|
2211
2239
|
check_is_mode(final_mode, "final_mode")
|
2212
2240
|
check_is_mode(mode, "mode")
|
2213
2241
|
|
2242
|
+
# calculate internal precision
|
2214
2243
|
if (iprec.nil?)
|
2215
2244
|
iprec = 5*(prec+1)
|
2216
2245
|
end
|
@@ -2218,6 +2247,8 @@ module LongMath
|
|
2218
2247
|
sprec = (iprec >> 1) + 1
|
2219
2248
|
dprec = (prec+1) << 1
|
2220
2249
|
|
2250
|
+
# use caching so that pi is only calculated again if it has not
|
2251
|
+
# been done at least with the required precision
|
2221
2252
|
cache_key = get_cache_key("pi", 0, mode, [0])
|
2222
2253
|
curr_pi = get_cached(cache_key, 0, sprec)
|
2223
2254
|
if curr_pi.nil? then
|
@@ -2259,7 +2290,6 @@ module LongMath
|
|
2259
2290
|
# removed in future versions.
|
2260
2291
|
#
|
2261
2292
|
def LongMath.exp(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
|
2262
|
-
# check_is_ld(x, "x")
|
2263
2293
|
raise TypeError, "x=#{x.inspect} must not be greater #{MAX_EXP_ABLE}" unless x <= MAX_EXP_ABLE
|
2264
2294
|
check_is_prec(prec, "prec")
|
2265
2295
|
check_is_mode(mode, "mode")
|
@@ -2271,8 +2301,7 @@ module LongMath
|
|
2271
2301
|
# LongDecimal. Only supports values of x such that the result still
|
2272
2302
|
# fits into a float (x <= 709). This limitation is somewhat
|
2273
2303
|
# arbitrary, but it is enforced in order to avoid producing numbers
|
2274
|
-
# with the exponential function that exceed the memory.
|
2275
|
-
# removed in future versions.
|
2304
|
+
# with the exponential function that exceed the memory.
|
2276
2305
|
#
|
2277
2306
|
def LongMath.exp2(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
|
2278
2307
|
LongMath.power(2, x, prec, mode)
|
@@ -2283,8 +2312,7 @@ module LongMath
|
|
2283
2312
|
# LongDecimal. Only supports values of x such that the result still
|
2284
2313
|
# fits into a float (x <= 709). This limitation is somewhat
|
2285
2314
|
# arbitrary, but it is enforced in order to avoid producing numbers
|
2286
|
-
# with the exponential function that exceed the memory.
|
2287
|
-
# removed in future versions.
|
2315
|
+
# with the exponential function that exceed the memory.
|
2288
2316
|
#
|
2289
2317
|
def LongMath.exp10(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
|
2290
2318
|
LongMath.power(10, x, prec, mode)
|
@@ -2302,7 +2330,8 @@ module LongMath
|
|
2302
2330
|
xf = x.to_f
|
2303
2331
|
iprec_extra = (xf / LOG10).abs
|
2304
2332
|
end
|
2305
|
-
iprec = ((prec+
|
2333
|
+
iprec = ((prec+12) * 1.20 + iprec_extra * 1.10).round
|
2334
|
+
# iprec = ((prec+10) * 1.20 + iprec_extra * 1.10).round
|
2306
2335
|
# iprec = ((prec+10)*1.20 + iprec_extra).round
|
2307
2336
|
# iprec = ((prec+10)*1.20 + iprec_extra*1.20).round
|
2308
2337
|
# puts("calc_iprec_for_exp: iprec=#{iprec} iprec_extra=#{iprec_extra}\n")
|
@@ -2469,7 +2498,7 @@ module LongMath
|
|
2469
2498
|
if (y_arr.nil?) then
|
2470
2499
|
y_arr = sqrt_raw(x, prec1, mode)
|
2471
2500
|
def y_arr.scale
|
2472
|
-
|
2501
|
+
self[0].scale
|
2473
2502
|
end
|
2474
2503
|
set_cached(cache_key, y_arr) if cache_result
|
2475
2504
|
end
|
@@ -2504,7 +2533,6 @@ module LongMath
|
|
2504
2533
|
# LongDecimal.
|
2505
2534
|
#
|
2506
2535
|
def LongMath.log(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
|
2507
|
-
# check_is_ld(x, "x")
|
2508
2536
|
check_is_prec(prec, "prec")
|
2509
2537
|
check_is_mode(mode, "mode")
|
2510
2538
|
log_internal(x, prec, mode)
|
@@ -2539,7 +2567,7 @@ module LongMath
|
|
2539
2567
|
# LongDecimal.
|
2540
2568
|
#
|
2541
2569
|
def LongMath.log2(x, prec, mode = LongDecimal::ROUND_HALF_DOWN)
|
2542
|
-
|
2570
|
+
|
2543
2571
|
check_is_prec(prec, "prec")
|
2544
2572
|
check_is_mode(mode, "mode")
|
2545
2573
|
iprec = prec + 2
|
@@ -2551,7 +2579,6 @@ module LongMath
|
|
2551
2579
|
end
|
2552
2580
|
id = x.int_digits2
|
2553
2581
|
xx = (x / (1 << id)).round_to_scale(x.scale+id)
|
2554
|
-
# puts("x=#{x} xx=#{xx} id=#{id} iprec=#{iprec}\n")
|
2555
2582
|
lnxx = log_internal(xx, iprec, mode)
|
2556
2583
|
ln2 = log_internal(2.to_ld, iprec, mode)
|
2557
2584
|
y = id + (lnxx / ln2).round_to_scale(prec, mode)
|
@@ -2566,7 +2593,7 @@ module LongMath
|
|
2566
2593
|
# not work correctly
|
2567
2594
|
#
|
2568
2595
|
def LongMath.log_internal(x, prec = nil, final_mode = LongDecimal::ROUND_HALF_DOWN, iprec = nil, mode = LongDecimal::ROUND_HALF_DOWN, cache_result = true)
|
2569
|
-
|
2596
|
+
|
2570
2597
|
raise TypeError, "x=#{x.inspect} must not be positive" unless x > 0
|
2571
2598
|
if (prec == nil) then
|
2572
2599
|
if (x.kind_of? LongDecimalBase)
|
@@ -2621,7 +2648,7 @@ module LongMath
|
|
2621
2648
|
# we have to rely on iprec being at least 10
|
2622
2649
|
raise TypeError, "iprec=#{iprec} out of range" unless (iprec.kind_of? Fixnum) && iprec >= 10
|
2623
2650
|
|
2624
|
-
#
|
2651
|
+
# dprec = [ iprec - 1, (prec + 1) << 1 ].min
|
2625
2652
|
# dprec >= 9
|
2626
2653
|
dprec = iprec - 1
|
2627
2654
|
|
@@ -2638,20 +2665,6 @@ module LongMath
|
|
2638
2665
|
|
2639
2666
|
# number that are beyond the usual range of Float need to be
|
2640
2667
|
# handled specially to reduce to something expressable as Float
|
2641
|
-
exp_part = 0
|
2642
|
-
estimate = 0
|
2643
|
-
# while (x > MAX_FLOATABLE) do
|
2644
|
-
# if (exp_part == 0) then
|
2645
|
-
# estimate = MAX_EXP_ABLE.to_i.to_ld
|
2646
|
-
# exp_part = exp(estimate, iprec)
|
2647
|
-
# end
|
2648
|
-
# x = (x / exp_part).round_to_scale(iprec, mode)
|
2649
|
-
# if (s < 0) then
|
2650
|
-
# y -= estimate
|
2651
|
-
# else
|
2652
|
-
# y += estimate
|
2653
|
-
# end
|
2654
|
-
# end
|
2655
2668
|
exp_keys = [ MAX_EXP_ABLE.to_i, 100, 10, 1 ]
|
2656
2669
|
exp_keys.each do |exp_key|
|
2657
2670
|
exp_val = exp(exp_key, iprec)
|
@@ -2664,35 +2677,6 @@ module LongMath
|
|
2664
2677
|
end
|
2665
2678
|
end
|
2666
2679
|
end
|
2667
|
-
# puts("log_raw divided t=#{Time.new-t0}")
|
2668
|
-
|
2669
|
-
# # make sure x is close enough to 1 in order to ensure good
|
2670
|
-
# # convergence of the Taylor-series
|
2671
|
-
# s2 = s
|
2672
|
-
# delta = LongDecimal(1, 3)
|
2673
|
-
# while (x - 1).abs > delta do
|
2674
|
-
# xf = x.to_f
|
2675
|
-
# mlx = Math.log(xf)
|
2676
|
-
# estimate = mlx.to_ld(20, LongDecimal::ROUND_DOWN)
|
2677
|
-
# exp_part = exp(estimate, (1.01 * iprec).ceil)
|
2678
|
-
# # exp_part = exp(estimate, iprec << 1)
|
2679
|
-
# xq = (x / exp_part)
|
2680
|
-
# if (xq < 1)
|
2681
|
-
# xq = 1/xq
|
2682
|
-
# s = -s
|
2683
|
-
# end
|
2684
|
-
# x = xq.round_to_scale(iprec, mode)
|
2685
|
-
# if (x < 1)
|
2686
|
-
# puts("x=#{x} < 1 est=#{estimate} part=#{exp_part} s=#{s} s2=#{s2}\n")
|
2687
|
-
# end
|
2688
|
-
|
2689
|
-
# # add/subtract to y what we have already found
|
2690
|
-
# if (s2 < 0) then
|
2691
|
-
# y -= estimate
|
2692
|
-
# else
|
2693
|
-
# y += estimate
|
2694
|
-
# end
|
2695
|
-
# end
|
2696
2680
|
|
2697
2681
|
factor = 1
|
2698
2682
|
sprec = (iprec * 1.5).round
|
@@ -2705,7 +2689,6 @@ module LongMath
|
|
2705
2689
|
x = LongMath.sqrt(x, sprec, mode)
|
2706
2690
|
factor *= 2
|
2707
2691
|
end
|
2708
|
-
# puts("log_raw rooted t=#{Time.new-t0}")
|
2709
2692
|
|
2710
2693
|
sum = 0
|
2711
2694
|
z = 1 - x
|
@@ -2719,10 +2702,8 @@ module LongMath
|
|
2719
2702
|
sum += d
|
2720
2703
|
|
2721
2704
|
end
|
2722
|
-
# puts("log_raw summed t=#{Time.new-t0}")
|
2723
2705
|
|
2724
2706
|
y -= ((s * factor) * sum).round_to_scale(iprec, mode)
|
2725
|
-
# puts("log_raw done t=#{Time.new-t0}")
|
2726
2707
|
return y
|
2727
2708
|
end
|
2728
2709
|
|