long-decimal 0.00.10 → 0.00.11
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/VERSION +1 -1
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +12 -5
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000136.html +22 -0
- data/doc/classes/LongMath/LongDecimal.html +1624 -0
- data/doc/classes/LongMath/LongDecimal.src/M000061.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000062.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000063.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000064.html +20 -0
- data/doc/classes/LongMath/LongDecimal.src/M000065.html +109 -0
- data/doc/classes/LongMath/LongDecimal.src/M000066.html +34 -0
- data/doc/classes/LongMath/LongDecimal.src/M000067.html +41 -0
- data/doc/classes/LongMath/LongDecimal.src/M000068.html +35 -0
- data/doc/classes/LongMath/LongDecimal.src/M000069.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000070.html +29 -0
- data/doc/classes/LongMath/LongDecimal.src/M000071.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000072.html +38 -0
- data/doc/classes/LongMath/LongDecimal.src/M000073.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000074.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000075.html +20 -0
- data/doc/classes/LongMath/LongDecimal.src/M000076.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000077.html +29 -0
- data/doc/classes/LongMath/LongDecimal.src/M000078.html +46 -0
- data/doc/classes/LongMath/LongDecimal.src/M000079.html +29 -0
- data/doc/classes/LongMath/LongDecimal.src/M000080.html +27 -0
- data/doc/classes/LongMath/LongDecimal.src/M000081.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000083.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000084.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000085.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000086.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000087.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000089.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000090.html +22 -0
- data/doc/classes/LongMath/LongDecimal.src/M000091.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000092.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000093.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000094.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000095.html +29 -0
- data/doc/classes/LongMath/LongDecimal.src/M000096.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000097.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000098.html +34 -0
- data/doc/classes/LongMath/LongDecimal.src/M000099.html +22 -0
- data/doc/classes/LongMath/LongDecimal.src/M000100.html +19 -0
- data/doc/classes/LongMath/LongDecimal.src/M000101.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000102.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000103.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000104.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000105.html +21 -0
- data/doc/classes/LongMath/LongDecimal.src/M000106.html +21 -0
- data/doc/classes/LongMath/LongDecimal.src/M000107.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000108.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000109.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000110.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000111.html +19 -0
- data/doc/classes/LongMath/LongDecimal.src/M000112.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000113.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000114.html +30 -0
- data/doc/classes/LongMath/LongDecimal.src/M000115.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000116.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000117.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000118.html +30 -0
- data/doc/classes/LongMath/LongDecimal.src/M000119.html +23 -0
- data/doc/classes/LongMath/LongDecimal.src/M000120.html +19 -0
- data/doc/classes/LongMath/LongDecimal.src/M000121.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000122.html +47 -0
- data/doc/classes/LongMath/LongDecimal.src/M000123.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000124.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000125.html +47 -0
- data/doc/classes/LongMath/LongDecimal.src/M000126.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000127.html +19 -0
- data/doc/classes/LongMath/LongDecimal.src/M000130.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000131.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000132.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000133.html +18 -0
- data/doc/classes/LongMath/LongDecimal.src/M000134.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.html +797 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000024.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000025.html +28 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000026.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000027.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000028.html +19 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000029.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000030.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000031.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000032.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000033.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000034.html +22 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000035.html +23 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000036.html +23 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000037.html +23 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000038.html +23 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000039.html +35 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000040.html +22 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000041.html +19 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000042.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000043.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000044.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000045.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000046.html +77 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000047.html +36 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000048.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000049.html +23 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000050.html +19 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000051.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000052.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000053.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000054.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000055.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000058.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000059.html +18 -0
- data/doc/classes/LongMath/LongDecimalQuot.src/M000060.html +18 -0
- data/doc/classes/LongMath/Numeric.html +150 -0
- data/doc/classes/LongMath/Numeric.src/M000135.html +18 -0
- data/doc/classes/LongMath.html +70 -37
- data/doc/classes/LongMath.src/M000001.html +19 -0
- data/doc/classes/LongMath.src/M000002.html +18 -0
- data/doc/classes/LongMath.src/M000003.html +18 -0
- data/doc/classes/LongMath.src/M000004.html +19 -0
- data/doc/classes/LongMath.src/M000005.html +18 -0
- data/doc/classes/LongMath.src/M000006.html +32 -0
- data/doc/classes/LongMath.src/M000007.html +32 -0
- data/doc/classes/LongMath.src/M000008.html +19 -0
- data/doc/classes/LongMath.src/M000009.html +43 -0
- data/doc/classes/LongMath.src/M000010.html +19 -0
- data/doc/classes/LongMath.src/M000011.html +73 -0
- data/doc/classes/LongMath.src/M000012.html +35 -0
- data/doc/classes/LongMath.src/M000013.html +50 -0
- data/doc/classes/LongMath.src/M000014.html +47 -0
- data/doc/classes/LongMath.src/M000015.html +22 -0
- data/doc/classes/LongMath.src/M000016.html +25 -0
- data/doc/classes/LongMath.src/M000017.html +107 -0
- data/doc/classes/LongMath.src/M000018.html +21 -0
- data/doc/classes/LongMath.src/M000019.html +30 -0
- data/doc/classes/LongMath.src/M000020.html +30 -0
- data/doc/classes/LongMath.src/M000021.html +115 -0
- data/doc/classes/LongMath.src/M000022.html +22 -0
- data/doc/classes/LongMath.src/M000023.html +18 -0
- data/doc/created.rid +1 -1
- data/doc/files/lib/longdecimal_rb.html +2 -2
- data/doc/fr_method_index.html +108 -111
- data/lib/longdecimal.rb +333 -93
- metadata +139 -2
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>two! (LongMath::LongDecimal)</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/longdecimal.rb, line 738</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">two!</span>(<span class="ruby-identifier">s</span> = <span class="ruby-value">0</span>)
|
15
|
+
<span class="ruby-identifier">new</span>(<span class="ruby-value">2</span><span class="ruby-operator">*</span><span class="ruby-value">10</span><span class="ruby-operator">**</span><span class="ruby-identifier">s</span>, <span class="ruby-identifier">s</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>ten! (LongMath::LongDecimal)</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/longdecimal.rb, line 747</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">ten!</span>(<span class="ruby-identifier">s</span> = <span class="ruby-value">0</span>)
|
15
|
+
<span class="ruby-identifier">new</span>(<span class="ruby-value">10</span><span class="ruby-operator">**</span>(<span class="ruby-identifier">s</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>), <span class="ruby-identifier">s</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>minus_one! (LongMath::LongDecimal)</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/longdecimal.rb, line 756</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">minus_one!</span>(<span class="ruby-identifier">s</span> = <span class="ruby-value">0</span>)
|
15
|
+
<span class="ruby-identifier">new</span>(<span class="ruby-value">-1</span><span class="ruby-operator">*</span><span class="ruby-value">10</span><span class="ruby-operator">**</span><span class="ruby-identifier">s</span>, <span class="ruby-identifier">s</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>power_of_ten! (LongMath::LongDecimal)</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/longdecimal.rb, line 766</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">power_of_ten!</span>(<span class="ruby-identifier">e</span>, <span class="ruby-identifier">s</span> = <span class="ruby-value">0</span>)
|
15
|
+
<span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">check_is_int</span>(<span class="ruby-identifier">e</span>, <span class="ruby-value str">"e"</span>)
|
16
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"negative 1st arg \"#{e.inspect}\""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">e</span> <span class="ruby-operator"><</span> <span class="ruby-value">0</span>
|
17
|
+
<span class="ruby-identifier">new</span>(<span class="ruby-value">10</span><span class="ruby-operator">**</span>(<span class="ruby-identifier">s</span><span class="ruby-operator">+</span><span class="ruby-identifier">e</span>), <span class="ruby-identifier">s</span>)
|
18
|
+
<span class="ruby-keyword kw">end</span></pre>
|
19
|
+
</body>
|
20
|
+
</html>
|
@@ -0,0 +1,109 @@
|
|
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>new (LongMath::LongDecimal)</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/longdecimal.rb, line 779</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">x</span>, <span class="ruby-identifier">s</span>)
|
15
|
+
|
16
|
+
<span class="ruby-comment cmt"># handle some obvious errors with x first</span>
|
17
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"non numeric 1st arg \"#{x.inspect}\""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Numeric</span>) <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">String</span>)
|
18
|
+
<span class="ruby-comment cmt"># we could maybe even work with complex number, if their imaginary part is zero.</span>
|
19
|
+
<span class="ruby-comment cmt"># but this is not so important to deal with, so we raise an error anyway.</span>
|
20
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"complex numbers not supported \"#{x.inspect}\""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Complex</span>
|
21
|
+
|
22
|
+
<span class="ruby-comment cmt"># handle some obvious errors with optional second parameter, if present</span>
|
23
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"non integer 2nd arg \"#{s.inspect}\""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
|
24
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"negative 2nd arg \"#{s.inspect}\""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">s</span> <span class="ruby-operator"><</span> <span class="ruby-value">0</span>
|
25
|
+
|
26
|
+
<span class="ruby-comment cmt"># scale is the second parameter or 0 if it is missing</span>
|
27
|
+
<span class="ruby-identifier">scale</span> = <span class="ruby-identifier">s</span>
|
28
|
+
<span class="ruby-comment cmt"># int_val is the integral value that is multiplied by some 10**-n</span>
|
29
|
+
<span class="ruby-identifier">int_val</span> = <span class="ruby-value">0</span>
|
30
|
+
|
31
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span> <span class="ruby-keyword kw">then</span>
|
32
|
+
<span class="ruby-comment cmt"># integers are trivial to handle</span>
|
33
|
+
<span class="ruby-identifier">int_val</span> = <span class="ruby-identifier">x</span>
|
34
|
+
|
35
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Rational</span> <span class="ruby-keyword kw">then</span>
|
36
|
+
<span class="ruby-comment cmt"># rationals are rounded somehow</span>
|
37
|
+
<span class="ruby-comment cmt"># we need to come up with a better rule here.</span>
|
38
|
+
<span class="ruby-comment cmt"># if denominator is any product of powers of 2 and 5, we do not need to round</span>
|
39
|
+
<span class="ruby-identifier">denom</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">denominator</span>
|
40
|
+
<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">denom</span>, <span class="ruby-value">2</span>)
|
41
|
+
<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">denom</span>, <span class="ruby-value">5</span>)
|
42
|
+
<span class="ruby-identifier">iscale</span> = [<span class="ruby-identifier">mul_2</span>, <span class="ruby-identifier">mul_5</span>].<span class="ruby-identifier">max</span>
|
43
|
+
<span class="ruby-identifier">scale</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">iscale</span>
|
44
|
+
<span class="ruby-identifier">denom</span> <span class="ruby-operator">/=</span> <span class="ruby-value">2</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">mul_2</span>
|
45
|
+
<span class="ruby-identifier">denom</span> <span class="ruby-operator">/=</span> <span class="ruby-value">5</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">mul_5</span>
|
46
|
+
<span class="ruby-identifier">iscale2</span> = <span class="ruby-constant">Math</span>.<span class="ruby-identifier">log10</span>(<span class="ruby-identifier">denom</span>).<span class="ruby-identifier">ceil</span>
|
47
|
+
<span class="ruby-identifier">scale</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">iscale2</span>
|
48
|
+
<span class="ruby-comment cmt"># int_val = (x * 10 ** scale).to_i</span>
|
49
|
+
<span class="ruby-identifier">int_val</span> = (<span class="ruby-identifier">x</span> <span class="ruby-operator">*</span> <span class="ruby-value">10</span> <span class="ruby-operator">**</span> (<span class="ruby-identifier">iscale2</span><span class="ruby-operator">+</span><span class="ruby-identifier">iscale</span>)).<span class="ruby-identifier">to_i</span>
|
50
|
+
|
51
|
+
<span class="ruby-keyword kw">else</span>
|
52
|
+
<span class="ruby-comment cmt"># we assume a string or a floating point number</span>
|
53
|
+
<span class="ruby-comment cmt"># floating point number or BigDecimal is converted to string, so</span>
|
54
|
+
<span class="ruby-comment cmt"># we only deal with strings</span>
|
55
|
+
<span class="ruby-comment cmt"># this operation is not so common, so there is no urgent need to</span>
|
56
|
+
<span class="ruby-comment cmt"># optimize it</span>
|
57
|
+
<span class="ruby-identifier">num_str</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_s</span>
|
58
|
+
<span class="ruby-identifier">len</span> = <span class="ruby-identifier">num_str</span>.<span class="ruby-identifier">length</span>
|
59
|
+
|
60
|
+
<span class="ruby-comment cmt"># handle the obvious error that string is empty</span>
|
61
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"1st arg must not be empty string. \"#{num_str.inspect}\""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">len</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
|
62
|
+
|
63
|
+
<span class="ruby-comment cmt"># remove spaces and underscores</span>
|
64
|
+
<span class="ruby-identifier">num_str</span>.<span class="ruby-identifier">gsub!</span> <span class="ruby-regexp re">/\s/</span>, <span class="ruby-value str">""</span>
|
65
|
+
<span class="ruby-identifier">num_str</span>.<span class="ruby-identifier">gsub!</span> <span class="ruby-regexp re">/_/</span>, <span class="ruby-value str">""</span>
|
66
|
+
|
67
|
+
<span class="ruby-comment cmt"># handle sign</span>
|
68
|
+
<span class="ruby-identifier">num_str</span>.<span class="ruby-identifier">gsub!</span> <span class="ruby-regexp re">/^\+/</span>, <span class="ruby-value str">""</span>
|
69
|
+
<span class="ruby-identifier">negative</span> = <span class="ruby-keyword kw">false</span>
|
70
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">num_str</span>.<span class="ruby-identifier">gsub!</span> <span class="ruby-regexp re">/^-/</span>, <span class="ruby-value str">""</span> <span class="ruby-keyword kw">then</span>
|
71
|
+
<span class="ruby-identifier">negative</span> = <span class="ruby-keyword kw">true</span>
|
72
|
+
<span class="ruby-keyword kw">end</span>
|
73
|
+
|
74
|
+
<span class="ruby-comment cmt"># split in parts before and after decimal point</span>
|
75
|
+
<span class="ruby-identifier">num_arr</span> = <span class="ruby-identifier">num_str</span>.<span class="ruby-identifier">split</span> <span class="ruby-regexp re">/\./</span>
|
76
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">num_arr</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">></span> <span class="ruby-value">2</span> <span class="ruby-keyword kw">then</span>
|
77
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"1st arg contains more than one . \"#{num_str.inspect}\""</span>
|
78
|
+
<span class="ruby-keyword kw">end</span>
|
79
|
+
<span class="ruby-identifier">num_int</span> = <span class="ruby-identifier">num_arr</span>[<span class="ruby-value">0</span>]
|
80
|
+
<span class="ruby-identifier">num_rem</span> = <span class="ruby-identifier">num_arr</span>[<span class="ruby-value">1</span>]
|
81
|
+
<span class="ruby-identifier">num_frac</span> = <span class="ruby-keyword kw">nil</span>
|
82
|
+
<span class="ruby-identifier">num_exp</span> = <span class="ruby-keyword kw">nil</span>
|
83
|
+
<span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">num_rem</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">then</span>
|
84
|
+
<span class="ruby-identifier">num_arr</span> = <span class="ruby-identifier">num_rem</span>.<span class="ruby-identifier">split</span> <span class="ruby-regexp re">/[Ee]/</span>
|
85
|
+
<span class="ruby-identifier">num_frac</span> = <span class="ruby-identifier">num_arr</span>[<span class="ruby-value">0</span>]
|
86
|
+
<span class="ruby-identifier">num_exp</span> = <span class="ruby-identifier">num_arr</span>[<span class="ruby-value">1</span>]
|
87
|
+
<span class="ruby-keyword kw">end</span>
|
88
|
+
|
89
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">num_frac</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">then</span>
|
90
|
+
<span class="ruby-identifier">num_frac</span> = <span class="ruby-value str">""</span>
|
91
|
+
<span class="ruby-keyword kw">end</span>
|
92
|
+
|
93
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">num_exp</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">num_exp</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-keyword kw">then</span>
|
94
|
+
<span class="ruby-identifier">num_exp</span> = <span class="ruby-value str">"0"</span>
|
95
|
+
<span class="ruby-keyword kw">end</span>
|
96
|
+
<span class="ruby-identifier">num_exp</span> = <span class="ruby-identifier">num_exp</span>.<span class="ruby-identifier">to_i</span>
|
97
|
+
<span class="ruby-identifier">iscale</span> = <span class="ruby-identifier">num_frac</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">num_exp</span>
|
98
|
+
<span class="ruby-identifier">scale</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">iscale</span>
|
99
|
+
<span class="ruby-identifier">int_val</span> = (<span class="ruby-identifier">num_int</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">num_frac</span>).<span class="ruby-identifier">to_i</span>
|
100
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">negative</span> <span class="ruby-keyword kw">then</span>
|
101
|
+
<span class="ruby-identifier">int_val</span> = <span class="ruby-operator">-</span><span class="ruby-identifier">int_val</span>
|
102
|
+
<span class="ruby-keyword kw">end</span>
|
103
|
+
<span class="ruby-keyword kw">end</span>
|
104
|
+
<span class="ruby-ivar">@scale</span> = <span class="ruby-identifier">scale</span>
|
105
|
+
<span class="ruby-ivar">@int_val</span> = <span class="ruby-identifier">int_val</span>
|
106
|
+
|
107
|
+
<span class="ruby-keyword kw">end</span></pre>
|
108
|
+
</body>
|
109
|
+
</html>
|
@@ -0,0 +1,34 @@
|
|
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>scale= (LongMath::LongDecimal)</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/longdecimal.rb, line 898</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scale=</span>(<span class="ruby-identifier">s</span>)
|
15
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"non integer arg \"#{s.inspect}\""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
|
16
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"negative arg \"#{s.inspect}\""</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">s</span> <span class="ruby-operator"><</span> <span class="ruby-value">0</span>
|
17
|
+
|
18
|
+
<span class="ruby-comment cmt"># do not work too hard, if scale does not really change.</span>
|
19
|
+
<span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@scale</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">s</span> <span class="ruby-keyword kw">then</span>
|
20
|
+
<span class="ruby-comment cmt"># multiply int_val by a power of 10 in order to compensate for</span>
|
21
|
+
<span class="ruby-comment cmt"># the change of scale and to keep number in the same order of magnitude.</span>
|
22
|
+
<span class="ruby-identifier">d</span> = <span class="ruby-identifier">s</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@scale</span>
|
23
|
+
<span class="ruby-identifier">f</span> = <span class="ruby-value">10</span> <span class="ruby-operator">**</span> (<span class="ruby-identifier">d</span>.<span class="ruby-identifier">abs</span>)
|
24
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">d</span> <span class="ruby-operator">>=</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
|
25
|
+
<span class="ruby-ivar">@int_val</span> = (<span class="ruby-ivar">@int_val</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">f</span>).<span class="ruby-identifier">to_i</span>
|
26
|
+
<span class="ruby-keyword kw">else</span>
|
27
|
+
<span class="ruby-comment cmt"># here we actually do rounding</span>
|
28
|
+
<span class="ruby-ivar">@int_val</span> = (<span class="ruby-ivar">@int_val</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">f</span>).<span class="ruby-identifier">to_i</span>
|
29
|
+
<span class="ruby-keyword kw">end</span>
|
30
|
+
<span class="ruby-ivar">@scale</span> = <span class="ruby-identifier">s</span>
|
31
|
+
<span class="ruby-keyword kw">end</span>
|
32
|
+
<span class="ruby-keyword kw">end</span></pre>
|
33
|
+
</body>
|
34
|
+
</html>
|
@@ -0,0 +1,41 @@
|
|
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>round_to_scale (LongMath::LongDecimal)</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/longdecimal.rb, line 928</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">ROUND_UNNECESSARY</span>)
|
15
|
+
|
16
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"new_scale #{new_scale.inspect} must be integer"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">new_scale</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
|
17
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"new_scale #{new_scale.inspect} must be >= 0"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">new_scale</span> <span class="ruby-operator">>=</span> <span class="ruby-value">0</span>
|
18
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"mode #{mode.inspect} must be legal rounding mode"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">mode</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">RoundingModeClass</span>
|
19
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@scale</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">new_scale</span> <span class="ruby-keyword kw">then</span>
|
20
|
+
<span class="ruby-keyword kw">self</span>
|
21
|
+
<span class="ruby-keyword kw">else</span>
|
22
|
+
<span class="ruby-identifier">diff</span> = <span class="ruby-identifier">new_scale</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">scale</span>
|
23
|
+
<span class="ruby-identifier">factor</span> = <span class="ruby-value">10</span> <span class="ruby-operator">**</span> (<span class="ruby-identifier">diff</span>.<span class="ruby-identifier">abs</span>)
|
24
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">diff</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
|
25
|
+
<span class="ruby-comment cmt"># we become more precise, no rounding issues</span>
|
26
|
+
<span class="ruby-identifier">new_int_val</span> = <span class="ruby-identifier">int_val</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">factor</span>
|
27
|
+
<span class="ruby-keyword kw">else</span>
|
28
|
+
<span class="ruby-identifier">quot</span>, <span class="ruby-identifier">rem</span> = <span class="ruby-identifier">int_val</span>.<span class="ruby-identifier">divmod</span>(<span class="ruby-identifier">factor</span>)
|
29
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">rem</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
|
30
|
+
<span class="ruby-identifier">new_int_val</span> = <span class="ruby-identifier">quot</span>
|
31
|
+
<span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">ROUND_UNNECESSARY</span>) <span class="ruby-keyword kw">then</span>
|
32
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">"mode ROUND_UNNECESSARY not applicable, remainder #{rem.to_s} is not zero"</span>
|
33
|
+
<span class="ruby-keyword kw">else</span>
|
34
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-constant">LongDecimalQuot</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-constant">LongDecimal</span>(<span class="ruby-value">1</span>)).<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">mode</span>)
|
35
|
+
<span class="ruby-keyword kw">end</span>
|
36
|
+
<span class="ruby-keyword kw">end</span>
|
37
|
+
<span class="ruby-constant">LongDecimal</span>(<span class="ruby-identifier">new_int_val</span>, <span class="ruby-identifier">new_scale</span>)
|
38
|
+
<span class="ruby-keyword kw">end</span>
|
39
|
+
<span class="ruby-keyword kw">end</span></pre>
|
40
|
+
</body>
|
41
|
+
</html>
|
@@ -0,0 +1,35 @@
|
|
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_s (LongMath::LongDecimal)</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/longdecimal.rb, line 967</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">shown_scale</span> = <span class="ruby-ivar">@scale</span>, <span class="ruby-identifier">mode</span> = <span class="ruby-constant">ROUND_UNNECESSARY</span>, <span class="ruby-identifier">base</span> = <span class="ruby-value">10</span>)
|
15
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">base</span> <span class="ruby-operator">==</span> <span class="ruby-value">10</span>) <span class="ruby-keyword kw">then</span>
|
16
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">shown_scale</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@scale</span>)
|
17
|
+
<span class="ruby-identifier">to_s_10</span>
|
18
|
+
<span class="ruby-keyword kw">else</span>
|
19
|
+
<span class="ruby-identifier">s</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">shown_scale</span>, <span class="ruby-identifier">mode</span>)
|
20
|
+
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">to_s_10</span>
|
21
|
+
<span class="ruby-keyword kw">end</span>
|
22
|
+
<span class="ruby-keyword kw">else</span>
|
23
|
+
<span class="ruby-comment cmt"># base is not 10</span>
|
24
|
+
<span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">base</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>) <span class="ruby-operator">&&</span> <span class="ruby-value">2</span> <span class="ruby-operator"><=</span> <span class="ruby-identifier">base</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">base</span> <span class="ruby-operator"><=</span> <span class="ruby-value">36</span> <span class="ruby-keyword kw">then</span>
|
25
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">"base must be integer between 2 and 36"</span>
|
26
|
+
<span class="ruby-keyword kw">end</span>
|
27
|
+
<span class="ruby-identifier">quot</span> = (<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">move_point_right</span>(<span class="ruby-identifier">scale</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">base</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">shown_scale</span>) <span class="ruby-operator">/</span> <span class="ruby-value">10</span> <span class="ruby-operator">**</span> <span class="ruby-identifier">scale</span>
|
28
|
+
<span class="ruby-identifier">p</span>(<span class="ruby-identifier">quot</span>)
|
29
|
+
<span class="ruby-identifier">rounded</span> = <span class="ruby-identifier">quot</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">mode</span>)
|
30
|
+
<span class="ruby-identifier">p</span>(<span class="ruby-identifier">rounded</span>)
|
31
|
+
<span class="ruby-identifier">rounded</span>.<span class="ruby-identifier">to_s_internal</span>(<span class="ruby-identifier">base</span>, <span class="ruby-identifier">shown_scale</span>)
|
32
|
+
<span class="ruby-keyword kw">end</span>
|
33
|
+
<span class="ruby-keyword kw">end</span></pre>
|
34
|
+
</body>
|
35
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>to_s_10 (LongMath::LongDecimal)</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/longdecimal.rb, line 992</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s_10</span>
|
15
|
+
<span class="ruby-identifier">to_s_internal</span>(<span class="ruby-value">10</span>, <span class="ruby-identifier">scale</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,29 @@
|
|
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_s_internal (LongMath::LongDecimal)</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/longdecimal.rb, line 999</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s_internal</span>(<span class="ruby-identifier">b</span>, <span class="ruby-identifier">sc</span>)
|
15
|
+
<span class="ruby-identifier">sg</span> = <span class="ruby-identifier">sgn</span>
|
16
|
+
<span class="ruby-identifier">i</span> = <span class="ruby-identifier">int_val</span>.<span class="ruby-identifier">abs</span>
|
17
|
+
<span class="ruby-identifier">str</span> = <span class="ruby-identifier">i</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">b</span>)
|
18
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sc</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">then</span>
|
19
|
+
<span class="ruby-identifier">missing</span> = <span class="ruby-identifier">sc</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
|
20
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">missing</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">then</span>
|
21
|
+
<span class="ruby-identifier">str</span> = (<span class="ruby-value str">"0"</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">missing</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">str</span>
|
22
|
+
<span class="ruby-keyword kw">end</span>
|
23
|
+
<span class="ruby-identifier">str</span>[<span class="ruby-operator">-</span><span class="ruby-identifier">sc</span>, <span class="ruby-value">0</span>] = <span class="ruby-value str">"."</span>
|
24
|
+
<span class="ruby-keyword kw">end</span>
|
25
|
+
<span class="ruby-identifier">str</span> = <span class="ruby-value str">"-"</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">str</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">sg</span> <span class="ruby-operator"><</span> <span class="ruby-value">0</span>
|
26
|
+
<span class="ruby-identifier">str</span>
|
27
|
+
<span class="ruby-keyword kw">end</span></pre>
|
28
|
+
</body>
|
29
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>to_r (LongMath::LongDecimal)</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/longdecimal.rb, line 1022</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_r</span>
|
15
|
+
<span class="ruby-constant">Rational</span>(<span class="ruby-identifier">numerator</span>, <span class="ruby-identifier">denominator</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,38 @@
|
|
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_f (LongMath::LongDecimal)</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/longdecimal.rb, line 1033</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_f</span>
|
15
|
+
<span class="ruby-identifier">divisor</span> = <span class="ruby-identifier">denominator</span>
|
16
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">divisor</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>) <span class="ruby-keyword kw">then</span>
|
17
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">to_f</span>
|
18
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">int_val</span>.<span class="ruby-identifier">abs</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-keyword kw">then</span>
|
19
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">divisor</span>.<span class="ruby-identifier">abs</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-keyword kw">then</span>
|
20
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span><span class="ruby-value">.0</span>
|
21
|
+
<span class="ruby-keyword kw">else</span>
|
22
|
+
<span class="ruby-identifier">f</span> = <span class="ruby-identifier">int_val</span>.<span class="ruby-identifier">to_f</span>
|
23
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">divisor</span>
|
24
|
+
<span class="ruby-keyword kw">end</span>
|
25
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">divisor</span>
|
26
|
+
<span class="ruby-comment cmt"># self is between -1 and 1</span>
|
27
|
+
<span class="ruby-comment cmt"># factor = numerator.abs.div(LongMath::MAX_FLOATABLE)</span>
|
28
|
+
<span class="ruby-comment cmt"># digits = factor.to_ld.int_digits10</span>
|
29
|
+
<span class="ruby-comment cmt"># return LongDecimal(numerator.div(10**digits), scale -digits).to_f</span>
|
30
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_f</span>
|
31
|
+
<span class="ruby-keyword kw">else</span>
|
32
|
+
<span class="ruby-comment cmt"># s2 = [scale.div(2), 1].max</span>
|
33
|
+
<span class="ruby-comment cmt"># return LongDecimal(numerator.div(10**s2), scale - s2).to_f</span>
|
34
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_f</span>
|
35
|
+
<span class="ruby-keyword kw">end</span>
|
36
|
+
<span class="ruby-keyword kw">end</span></pre>
|
37
|
+
</body>
|
38
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>to_i (LongMath::LongDecimal)</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/longdecimal.rb, line 1063</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_i</span>
|
15
|
+
<span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">div</span>(<span class="ruby-identifier">denominator</span>)
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>to_ld (LongMath::LongDecimal)</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/longdecimal.rb, line 1070</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_ld</span>
|
15
|
+
<span class="ruby-keyword kw">self</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
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_bd (LongMath::LongDecimal)</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/longdecimal.rb, line 1077</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_bd</span>
|
15
|
+
<span class="ruby-comment cmt"># this operation is probably not used so heavily, so we can live with a</span>
|
16
|
+
<span class="ruby-comment cmt"># string as an intermediate step.</span>
|
17
|
+
<span class="ruby-constant">BigDecimal</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>)
|
18
|
+
<span class="ruby-keyword kw">end</span></pre>
|
19
|
+
</body>
|
20
|
+
</html>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
+
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>denominator (LongMath::LongDecimal)</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/longdecimal.rb, line 1091</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">denominator</span>
|
15
|
+
<span class="ruby-value">10</span><span class="ruby-operator">**</span><span class="ruby-identifier">scale</span>
|
16
|
+
<span class="ruby-keyword kw">end</span></pre>
|
17
|
+
</body>
|
18
|
+
</html>
|
@@ -0,0 +1,29 @@
|
|
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>int_digits2 (LongMath::LongDecimal)</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/longdecimal.rb, line 1113</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">int_digits2</span>
|
15
|
+
<span class="ruby-identifier">int_part</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_i</span>.<span class="ruby-identifier">abs</span>
|
16
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">then</span>
|
17
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span>
|
18
|
+
<span class="ruby-keyword kw">end</span>
|
19
|
+
|
20
|
+
<span class="ruby-identifier">n</span> = <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">*</span> <span class="ruby-value">8</span> <span class="ruby-operator">-</span> <span class="ruby-value">31</span>
|
21
|
+
<span class="ruby-identifier">int_part</span> = <span class="ruby-identifier">int_part</span> <span class="ruby-operator">>></span> <span class="ruby-identifier">n</span>
|
22
|
+
<span class="ruby-keyword kw">until</span> <span class="ruby-identifier">int_part</span>.<span class="ruby-identifier">zero?</span> <span class="ruby-keyword kw">do</span>
|
23
|
+
<span class="ruby-identifier">int_part</span> = <span class="ruby-identifier">int_part</span> <span class="ruby-operator">>></span> <span class="ruby-value">1</span>
|
24
|
+
<span class="ruby-identifier">n</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
25
|
+
<span class="ruby-keyword kw">end</span>
|
26
|
+
<span class="ruby-identifier">n</span>
|
27
|
+
<span class="ruby-keyword kw">end</span></pre>
|
28
|
+
</body>
|
29
|
+
</html>
|