long-decimal 0.01.01 → 0.01.02
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +17 -94
- data/VERSION +1 -1
- data/doc/classes/Integer.html +239 -0
- data/doc/classes/Integer.src/M000036.html +18 -0
- data/doc/classes/Integer.src/M000039.html +145 -0
- data/doc/classes/LongDecimal.html +453 -399
- data/doc/classes/LongDecimal.src/M000040.html +4 -4
- data/doc/classes/LongDecimal.src/M000041.html +4 -4
- data/doc/classes/LongDecimal.src/M000042.html +4 -6
- data/doc/classes/LongDecimal.src/M000043.html +4 -106
- data/doc/classes/LongDecimal.src/M000044.html +4 -21
- data/doc/classes/LongDecimal.src/M000045.html +4 -11
- data/doc/classes/LongDecimal.src/M000046.html +6 -27
- data/doc/classes/LongDecimal.src/M000047.html +103 -16
- data/doc/classes/LongDecimal.src/M000048.html +21 -4
- data/doc/classes/LongDecimal.src/M000049.html +10 -14
- data/doc/classes/LongDecimal.src/M000050.html +22 -36
- data/doc/classes/LongDecimal.src/M000051.html +34 -4
- data/doc/classes/LongDecimal.src/M000052.html +17 -6
- data/doc/classes/LongDecimal.src/M000053.html +4 -6
- data/doc/classes/LongDecimal.src/M000054.html +15 -4
- data/doc/classes/LongDecimal.src/M000055.html +44 -12
- data/doc/classes/LongDecimal.src/M000056.html +4 -7
- data/doc/classes/LongDecimal.src/M000057.html +8 -4
- data/doc/classes/LongDecimal.src/M000058.html +6 -15
- data/doc/classes/LongDecimal.src/M000059.html +4 -13
- data/doc/classes/LongDecimal.src/M000060.html +15 -4
- data/doc/classes/LongDecimal.src/M000061.html +7 -5
- data/doc/classes/LongDecimal.src/M000062.html +4 -4
- data/doc/classes/LongDecimal.src/M000063.html +15 -5
- data/doc/classes/LongDecimal.src/M000064.html +13 -5
- data/doc/classes/LongDecimal.src/M000065.html +4 -4
- data/doc/classes/LongDecimal.src/M000067.html +4 -8
- data/doc/classes/LongDecimal.src/M000068.html +5 -9
- data/doc/classes/LongDecimal.src/M000069.html +5 -9
- data/doc/classes/LongDecimal.src/M000070.html +4 -9
- data/doc/classes/LongDecimal.src/M000071.html +4 -4
- data/doc/classes/LongDecimal.src/M000072.html +6 -17
- data/doc/classes/LongDecimal.src/M000073.html +7 -7
- data/doc/classes/LongDecimal.src/M000074.html +7 -7
- data/doc/classes/LongDecimal.src/M000075.html +7 -19
- data/doc/classes/LongDecimal.src/M000076.html +4 -8
- data/doc/classes/LongDecimal.src/M000077.html +19 -5
- data/doc/classes/LongDecimal.src/M000078.html +7 -7
- data/doc/classes/LongDecimal.src/M000079.html +7 -7
- data/doc/classes/LongDecimal.src/M000080.html +19 -7
- data/doc/classes/LongDecimal.src/M000081.html +8 -4
- data/doc/classes/LongDecimal.src/M000082.html +5 -7
- data/doc/classes/LongDecimal.src/M000083.html +8 -6
- data/doc/classes/LongDecimal.src/M000084.html +9 -4
- data/doc/classes/LongDecimal.src/M000085.html +9 -4
- data/doc/classes/LongDecimal.src/M000086.html +4 -9
- data/doc/classes/LongDecimal.src/M000087.html +6 -8
- data/doc/classes/LongDecimal.src/M000088.html +7 -5
- data/doc/classes/LongDecimal.src/M000089.html +4 -9
- data/doc/classes/LongDecimal.src/M000090.html +4 -4
- data/doc/classes/LongDecimal.src/M000091.html +9 -4
- data/doc/classes/LongDecimal.src/M000092.html +9 -4
- data/doc/classes/LongDecimal.src/M000093.html +5 -4
- data/doc/classes/LongDecimal.src/M000094.html +7 -57
- data/doc/classes/LongDecimal.src/M000095.html +4 -4
- data/doc/classes/LongDecimal.src/M000096.html +4 -4
- data/doc/classes/LongDecimal.src/M000097.html +4 -5
- data/doc/classes/LongDecimal.src/M000098.html +4 -5
- data/doc/classes/LongDecimal.src/M000099.html +59 -5
- data/doc/classes/LongDecimal.src/M000100.html +4 -5
- data/doc/classes/LongDecimal.src/M000101.html +4 -4
- data/doc/classes/LongDecimal.src/M000104.html +19 -0
- data/doc/classes/LongDecimal.src/M000105.html +19 -0
- data/doc/classes/LongDecimal.src/M000106.html +18 -0
- data/doc/classes/LongDecimal.src/M000107.html +18 -0
- data/doc/classes/LongDecimal.src/M000108.html +18 -0
- data/doc/classes/LongDecimal.src/M000109.html +18 -0
- data/doc/classes/LongDecimalBase.html +69 -66
- data/doc/classes/LongDecimalBase.src/M000113.html +4 -9
- data/doc/classes/LongDecimalBase.src/M000114.html +4 -5
- data/doc/classes/LongDecimalBase.src/M000115.html +4 -9
- data/doc/classes/LongDecimalBase.src/M000116.html +4 -9
- data/doc/classes/LongDecimalBase.src/M000117.html +4 -5
- data/doc/classes/LongDecimalBase.src/M000118.html +23 -0
- data/doc/classes/LongDecimalBase.src/M000121.html +23 -0
- data/doc/classes/LongDecimalBase.src/M000122.html +19 -0
- data/doc/classes/LongDecimalBase.src/M000123.html +18 -0
- data/doc/classes/LongDecimalQuot.html +33 -27
- data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000012.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000030.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000031.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000034.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000035.html +1 -1
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +25 -24
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000156.html +22 -0
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000157.html +18 -0
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000158.html +18 -0
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000159.html +18 -0
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000161.html +25 -0
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000162.html +18 -0
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000163.html +18 -0
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000164.html +18 -0
- data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.html +178 -0
- data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.src/M000165.html +25 -0
- data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.src/M000166.html +18 -0
- data/doc/classes/LongDecimalRoundingMode.html +41 -4
- data/doc/classes/LongMath/CacheKey.html +10 -10
- data/doc/classes/LongMath/CacheKey.src/M000155.html +36 -0
- data/doc/classes/LongMath/CacheKey.src/M000160.html +36 -0
- data/doc/classes/LongMath.html +246 -235
- data/doc/classes/LongMath.src/M000124.html +5 -18
- data/doc/classes/LongMath.src/M000125.html +4 -18
- data/doc/classes/LongMath.src/M000126.html +4 -5
- data/doc/classes/LongMath.src/M000127.html +5 -29
- data/doc/classes/LongMath.src/M000128.html +4 -5
- data/doc/classes/LongMath.src/M000129.html +14 -53
- data/doc/classes/LongMath.src/M000130.html +17 -20
- data/doc/classes/LongMath.src/M000131.html +5 -36
- data/doc/classes/LongMath.src/M000132.html +29 -6
- data/doc/classes/LongMath.src/M000133.html +5 -33
- data/doc/classes/LongMath.src/M000134.html +47 -41
- data/doc/classes/LongMath.src/M000135.html +21 -7
- data/doc/classes/LongMath.src/M000136.html +36 -4
- data/doc/classes/LongMath.src/M000137.html +6 -4
- data/doc/classes/LongMath.src/M000138.html +31 -70
- data/doc/classes/LongMath.src/M000139.html +45 -38
- data/doc/classes/LongMath.src/M000140.html +7 -4
- data/doc/classes/LongMath.src/M000141.html +4 -4
- data/doc/classes/LongMath.src/M000142.html +4 -6
- data/doc/classes/LongMath.src/M000143.html +67 -14
- data/doc/classes/LongMath.src/M000144.html +39 -14
- data/doc/classes/LongMath.src/M000145.html +4 -44
- data/doc/classes/LongMath.src/M000146.html +5 -339
- data/doc/classes/LongMath.src/M000147.html +6 -25
- data/doc/classes/LongMath.src/M000148.html +14 -75
- data/doc/classes/LongMath.src/M000149.html +33 -0
- data/doc/classes/LongMath.src/M000150.html +58 -0
- data/doc/classes/LongMath.src/M000151.html +406 -0
- data/doc/classes/LongMath.src/M000152.html +63 -0
- data/doc/classes/LongMath.src/M000153.html +117 -0
- data/doc/classes/LongMath.src/M000154.html +150 -0
- data/doc/classes/LongMath.src/M000155.html +63 -0
- data/doc/classes/LongMath.src/M000156.html +18 -0
- data/doc/classes/LongMath.src/M000157.html +19 -0
- data/doc/classes/LongMath.src/M000158.html +18 -0
- data/doc/classes/LongMath.src/M000159.html +19 -0
- data/doc/classes/Numeric.html +23 -21
- data/doc/classes/Numeric.src/M000106.html +18 -0
- data/doc/classes/Numeric.src/M000110.html +23 -0
- data/doc/classes/Numeric.src/M000111.html +18 -0
- data/doc/classes/Rational.html +18 -16
- data/doc/classes/Rational.src/M000107.html +23 -0
- data/doc/classes/Rational.src/M000112.html +23 -0
- data/doc/created.rid +1 -1
- data/doc/dot/f_0.dot +23 -1
- data/doc/dot/f_0.png +0 -0
- data/doc/dot/m_0_0.png +0 -0
- data/doc/dot/m_0_1.dot +13 -0
- data/doc/dot/m_0_1.png +0 -0
- data/doc/files/lib/long-decimal_rb.html +15 -13
- 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_class_index.html +2 -0
- data/doc/fr_method_index.html +131 -124
- data/lib/long-decimal.rb +373 -49
- data/test/testlongdecimal.rb +689 -7
- data/test/testlongdeclib.rb +51 -11
- data/test/testrandlib.rb +23 -7
- data/test/testrandom.rb +4 -4
- data/test/testrandpower.rb +11 -9
- metadata +48 -3
|
@@ -5,25 +5,21 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>round_trailing_zeros (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-identifier">
|
|
16
|
-
<span class="ruby-
|
|
17
|
-
|
|
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>
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 646</span>
|
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">round_trailing_zeros</span>
|
|
15
|
+
<span class="ruby-identifier">n</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">multiplicity_of_10</span>(<span class="ruby-identifier">int_val</span>)
|
|
16
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">n</span>.<span class="ruby-identifier">zero?</span>) <span class="ruby-keyword kw">then</span>
|
|
17
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>
|
|
24
18
|
<span class="ruby-keyword kw">end</span>
|
|
25
|
-
<span class="ruby-
|
|
26
|
-
|
|
19
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">n</span> <span class="ruby-operator">></span> <span class="ruby-identifier">scale</span>) <span class="ruby-keyword kw">then</span>
|
|
20
|
+
<span class="ruby-identifier">n</span> = <span class="ruby-identifier">scale</span>
|
|
21
|
+
<span class="ruby-keyword kw">end</span>
|
|
22
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">scale</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">n</span>)
|
|
27
23
|
<span class="ruby-keyword kw">end</span></pre>
|
|
28
24
|
</body>
|
|
29
25
|
</html>
|
|
@@ -5,50 +5,36 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>round_to_scale (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-comment cmt"># handle overflow: raise exception</span>
|
|
16
|
-
<span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</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>
|
|
17
|
-
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">"self=#{self.inspect} cannot be expressed as Float"</span>
|
|
18
|
-
<span class="ruby-keyword kw">end</span>
|
|
19
|
-
|
|
20
|
-
<span class="ruby-comment cmt"># handle underflow: return 0.0</span>
|
|
21
|
-
<span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</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">MIN_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
|
|
22
|
-
<span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span><span class="ruby-value">.0</span>
|
|
23
|
-
<span class="ruby-keyword kw">end</span>
|
|
24
|
-
|
|
25
|
-
<span class="ruby-identifier">divisor</span> = <span class="ruby-identifier">denominator</span>
|
|
26
|
-
<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>
|
|
27
|
-
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">to_f</span>
|
|
28
|
-
<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-constant">LongMath</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_FLOATABLE</span> <span class="ruby-keyword kw">then</span>
|
|
29
|
-
<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>
|
|
30
|
-
<span class="ruby-identifier">q</span> = <span class="ruby-value">10</span><span class="ruby-operator">**</span>(<span class="ruby-identifier">scale</span> <span class="ruby-operator">-</span> <span class="ruby-constant">Float</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_10_EXP</span>)
|
|
31
|
-
<span class="ruby-identifier">f</span> = (<span class="ruby-identifier">numerator</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">q</span>).<span class="ruby-identifier">to_f</span>
|
|
32
|
-
<span class="ruby-identifier">d</span> = <span class="ruby-identifier">divisor</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">q</span>
|
|
33
|
-
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">d</span>
|
|
34
|
-
<span class="ruby-keyword kw">else</span>
|
|
35
|
-
<span class="ruby-identifier">f</span> = <span class="ruby-identifier">numerator</span>.<span class="ruby-identifier">to_f</span>
|
|
36
|
-
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">divisor</span>
|
|
37
|
-
<span class="ruby-keyword kw">end</span>
|
|
38
|
-
<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>
|
|
39
|
-
<span class="ruby-comment cmt"># self is between -1 and 1</span>
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 665</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>)
|
|
40
15
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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>
|
|
45
21
|
<span class="ruby-keyword kw">else</span>
|
|
46
|
-
<span class="ruby-identifier">
|
|
47
|
-
<span class="ruby-
|
|
48
|
-
|
|
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>
|
|
49
27
|
<span class="ruby-keyword kw">else</span>
|
|
50
|
-
<span class="ruby-
|
|
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>
|
|
51
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>)
|
|
52
38
|
<span class="ruby-keyword kw">end</span>
|
|
53
39
|
<span class="ruby-keyword kw">end</span></pre>
|
|
54
40
|
</body>
|
|
@@ -5,14 +5,44 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>round_to_allowed_remainders (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 712</span>
|
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">round_to_allowed_remainders</span>(<span class="ruby-identifier">new_scale</span>,
|
|
15
|
+
<span class="ruby-identifier">remainders</span>,
|
|
16
|
+
<span class="ruby-identifier">modulus</span>,
|
|
17
|
+
<span class="ruby-identifier">rounding_mode</span> = <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_UNNECESSARY</span>,
|
|
18
|
+
<span class="ruby-identifier">zero_rounding_mode</span> = <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_UNNECESSARY</span>)
|
|
19
|
+
|
|
20
|
+
<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>
|
|
21
|
+
<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>
|
|
22
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">"remainders must be Array"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Array</span>
|
|
23
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">"remainders must be non-empty Array"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
24
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"modulus #{modulus.inspect} must be integer"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">modulus</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
|
|
25
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"modulus #{modulus.inspect} must be >= 2"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">modulus</span> <span class="ruby-operator">>=</span> <span class="ruby-value">2</span>
|
|
26
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"rounding_mode #{rounding_mode.inspect} must be legal rounding rounding_mode"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">rounding_mode</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">RoundingModeClass</span>
|
|
27
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">"ROUND_HALF_EVEN is not applicable here"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_EVEN</span>
|
|
28
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">"zero_rounding_mode #{zero_rounding_mode.inspect} must be legal zero_rounding zero_rounding_mode"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">zero_rounding_mode</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">ZeroRoundingModeClass</span>
|
|
29
|
+
|
|
30
|
+
<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>
|
|
31
|
+
<span class="ruby-identifier">expanded</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">rounding_mode</span>)
|
|
32
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">expanded</span>.<span class="ruby-identifier">round_to_allowed_remainders</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">remainders</span>, <span class="ruby-identifier">modulus</span>, <span class="ruby-identifier">rounding_mode</span>, <span class="ruby-identifier">zero_rounding_mode</span>)
|
|
33
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@scale</span> <span class="ruby-operator">></span> <span class="ruby-identifier">new_scale</span>
|
|
34
|
+
<span class="ruby-identifier">factor</span> = <span class="ruby-value">10</span><span class="ruby-operator">**</span>(<span class="ruby-ivar">@scale</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">new_scale</span>)
|
|
35
|
+
<span class="ruby-identifier">remainders</span> = <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span>
|
|
36
|
+
<span class="ruby-identifier">r</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">factor</span>
|
|
37
|
+
<span class="ruby-keyword kw">end</span>
|
|
38
|
+
<span class="ruby-identifier">modulus</span> <span class="ruby-operator">*=</span> <span class="ruby-identifier">factor</span>
|
|
39
|
+
<span class="ruby-keyword kw">end</span>
|
|
40
|
+
|
|
41
|
+
<span class="ruby-identifier">int_val_2</span> = <span class="ruby-ivar">@int_val</span>.<span class="ruby-identifier">round_to_allowed_remainders</span>(<span class="ruby-identifier">remainders</span>, <span class="ruby-identifier">modulus</span>, <span class="ruby-identifier">rounding_mode</span>, <span class="ruby-identifier">zero_rounding_mode</span>)
|
|
42
|
+
<span class="ruby-identifier">self_2</span> = <span class="ruby-constant">LongDecimal</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">int_val_2</span>, <span class="ruby-ivar">@scale</span>)
|
|
43
|
+
|
|
44
|
+
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">self_2</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>, <span class="ruby-identifier">rounding_mode</span>)
|
|
45
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">result</span>
|
|
16
46
|
<span class="ruby-keyword kw">end</span></pre>
|
|
17
47
|
</body>
|
|
18
48
|
</html>
|
|
@@ -5,17 +5,28 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>to_s (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">
|
|
16
|
-
<span class="ruby-keyword kw">
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 758</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>
|
|
17
22
|
<span class="ruby-keyword kw">else</span>
|
|
18
|
-
<span class="ruby-
|
|
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">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>)
|
|
29
|
+
<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>)
|
|
19
30
|
<span class="ruby-keyword kw">end</span>
|
|
20
31
|
<span class="ruby-keyword kw">end</span></pre>
|
|
21
32
|
</body>
|
|
@@ -5,16 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>to_s_10 (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-
|
|
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>)
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 781</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>)
|
|
18
16
|
<span class="ruby-keyword kw">end</span></pre>
|
|
19
17
|
</body>
|
|
20
18
|
</html>
|
|
@@ -5,14 +5,25 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>to_s_internal (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 788</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>
|
|
16
27
|
<span class="ruby-keyword kw">end</span></pre>
|
|
17
28
|
</body>
|
|
18
29
|
</html>
|
|
@@ -5,25 +5,57 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>to_f (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-
|
|
16
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-
|
|
17
|
-
<span class="ruby-
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 813</span>
|
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_f</span>
|
|
15
|
+
<span class="ruby-comment cmt"># handle overflow: raise exception</span>
|
|
16
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</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>
|
|
17
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">"self=#{self.inspect} cannot be expressed as Float"</span>
|
|
18
18
|
<span class="ruby-keyword kw">end</span>
|
|
19
19
|
|
|
20
|
-
<span class="ruby-
|
|
21
|
-
<span class="ruby-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
<span class="ruby-comment cmt"># handle underflow: return 0.0</span>
|
|
21
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</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">MIN_FLOATABLE</span>) <span class="ruby-keyword kw">then</span>
|
|
22
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-value">0</span><span class="ruby-value">.0</span>
|
|
23
|
+
<span class="ruby-keyword kw">end</span>
|
|
24
|
+
|
|
25
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-keyword kw">self</span> <span class="ruby-operator"><</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
|
|
26
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-operator">-</span>(<span class="ruby-operator">-</span><span class="ruby-keyword kw">self</span>).<span class="ruby-identifier">to_f</span>
|
|
27
|
+
<span class="ruby-keyword kw">end</span>
|
|
28
|
+
|
|
29
|
+
<span class="ruby-identifier">dividend</span> = <span class="ruby-identifier">numerator</span>
|
|
30
|
+
<span class="ruby-identifier">divisor</span> = <span class="ruby-identifier">denominator</span>
|
|
31
|
+
|
|
32
|
+
<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>
|
|
33
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">to_f</span>
|
|
34
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">dividend</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>
|
|
35
|
+
<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>
|
|
36
|
+
<span class="ruby-identifier">q</span> = <span class="ruby-value">10</span><span class="ruby-operator">**</span>(<span class="ruby-identifier">scale</span> <span class="ruby-operator">-</span> <span class="ruby-constant">Float</span><span class="ruby-operator">::</span><span class="ruby-constant">MAX_10_EXP</span>)
|
|
37
|
+
<span class="ruby-identifier">f</span> = (<span class="ruby-identifier">dividend</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">q</span>).<span class="ruby-identifier">to_f</span>
|
|
38
|
+
<span class="ruby-identifier">d</span> = <span class="ruby-identifier">divisor</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">q</span>
|
|
39
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">d</span>
|
|
40
|
+
<span class="ruby-keyword kw">else</span>
|
|
41
|
+
<span class="ruby-identifier">f</span> = <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">to_f</span>
|
|
42
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">divisor</span>
|
|
43
|
+
<span class="ruby-keyword kw">end</span>
|
|
44
|
+
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator"><</span> <span class="ruby-identifier">divisor</span>
|
|
45
|
+
<span class="ruby-comment cmt"># self is between -1 and 1</span>
|
|
46
|
+
|
|
47
|
+
<span class="ruby-comment cmt"># factor = dividend.abs.div(LongMath::MAX_FLOATABLE)</span>
|
|
48
|
+
<span class="ruby-comment cmt"># digits = factor.to_ld.int_digits10</span>
|
|
49
|
+
<span class="ruby-comment cmt"># return LongDecimal(dividend.div(10**digits), scale -digits).to_f</span>
|
|
50
|
+
<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>
|
|
51
|
+
<span class="ruby-keyword kw">else</span>
|
|
52
|
+
<span class="ruby-identifier">q</span> = <span class="ruby-identifier">dividend</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">divisor</span>
|
|
53
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">q</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">></span> <span class="ruby-value">1000000000000000000000</span>)
|
|
54
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">to_f</span>
|
|
55
|
+
<span class="ruby-keyword kw">else</span>
|
|
56
|
+
<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>
|
|
57
|
+
<span class="ruby-keyword kw">end</span>
|
|
25
58
|
<span class="ruby-keyword kw">end</span>
|
|
26
|
-
<span class="ruby-identifier">n</span>
|
|
27
59
|
<span class="ruby-keyword kw">end</span></pre>
|
|
28
60
|
</body>
|
|
29
61
|
</html>
|
|
@@ -5,17 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>to_i (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-
|
|
16
|
-
<span class="ruby-ivar">@digits10</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">int_digits10</span>(<span class="ruby-identifier">int_val</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">scale</span>
|
|
17
|
-
<span class="ruby-keyword kw">end</span>
|
|
18
|
-
<span class="ruby-ivar">@digits10</span>
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 866</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>)
|
|
19
16
|
<span class="ruby-keyword kw">end</span></pre>
|
|
20
17
|
</body>
|
|
21
18
|
</html>
|
|
@@ -5,14 +5,18 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>to_ld (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-keyword kw">
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 875</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">LongMath</span>.<span class="ruby-identifier">standard_mode</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-keyword kw">self</span>
|
|
17
|
+
<span class="ruby-keyword kw">else</span>
|
|
18
|
+
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">prec</span>, <span class="ruby-identifier">mode</span>)
|
|
19
|
+
<span class="ruby-keyword kw">end</span>
|
|
16
20
|
<span class="ruby-keyword kw">end</span></pre>
|
|
17
21
|
</body>
|
|
18
22
|
</html>
|
|
@@ -5,25 +5,16 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>to_bd (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-
|
|
16
|
-
<span class="ruby-
|
|
17
|
-
|
|
18
|
-
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">other</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Float</span>) <span class="ruby-keyword kw">then</span>
|
|
19
|
-
<span class="ruby-identifier">o</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">scale</span>, <span class="ruby-constant">ROUND_HALF_UP</span>)
|
|
20
|
-
<span class="ruby-keyword kw">else</span>
|
|
21
|
-
<span class="ruby-identifier">new_scale</span> = [<span class="ruby-identifier">s</span>.<span class="ruby-identifier">scale</span>, <span class="ruby-identifier">o</span>.<span class="ruby-identifier">scale</span>].<span class="ruby-identifier">max</span>
|
|
22
|
-
<span class="ruby-identifier">s</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>)
|
|
23
|
-
<span class="ruby-identifier">o</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-identifier">new_scale</span>)
|
|
24
|
-
<span class="ruby-keyword kw">end</span>
|
|
25
|
-
<span class="ruby-keyword kw">end</span>
|
|
26
|
-
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s</span>, <span class="ruby-identifier">o</span>
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 886</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>)
|
|
27
18
|
<span class="ruby-keyword kw">end</span></pre>
|
|
28
19
|
</body>
|
|
29
20
|
</html>
|
|
@@ -5,23 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>denominator (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-
|
|
16
|
-
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">s</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">LongDecimal</span>) <span class="ruby-keyword kw">then</span>
|
|
17
|
-
<span class="ruby-identifier">exponent</span> = [<span class="ruby-identifier">s</span>.<span class="ruby-identifier">scale</span>, <span class="ruby-identifier">o</span>.<span class="ruby-identifier">scale</span>].<span class="ruby-identifier">max</span>
|
|
18
|
-
<span class="ruby-identifier">factor</span> = <span class="ruby-value">10</span><span class="ruby-operator">**</span><span class="ruby-identifier">exponent</span>
|
|
19
|
-
<span class="ruby-identifier">s</span> <span class="ruby-operator">*=</span> <span class="ruby-identifier">factor</span>
|
|
20
|
-
<span class="ruby-identifier">o</span> <span class="ruby-operator">*=</span> <span class="ruby-identifier">factor</span>
|
|
21
|
-
<span class="ruby-identifier">s</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-value">0</span>)
|
|
22
|
-
<span class="ruby-identifier">o</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">round_to_scale</span>(<span class="ruby-value">0</span>)
|
|
23
|
-
<span class="ruby-keyword kw">end</span>
|
|
24
|
-
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">s</span>, <span class="ruby-identifier">o</span>
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 900</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>
|
|
25
16
|
<span class="ruby-keyword kw">end</span></pre>
|
|
26
17
|
</body>
|
|
27
18
|
</html>
|
|
@@ -5,14 +5,25 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>int_digits2 (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 922</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">abs</span>.<span class="ruby-identifier">to_i</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>
|
|
16
27
|
<span class="ruby-keyword kw">end</span></pre>
|
|
17
28
|
</body>
|
|
18
29
|
</html>
|
|
@@ -5,15 +5,17 @@
|
|
|
5
5
|
|
|
6
6
|
<html>
|
|
7
7
|
<head>
|
|
8
|
-
<title>
|
|
8
|
+
<title>sint_digits10 (LongDecimal)</title>
|
|
9
9
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
10
10
|
<link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
|
|
11
11
|
</head>
|
|
12
12
|
<body class="standalone-code">
|
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line
|
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">
|
|
15
|
-
<span class="ruby-
|
|
16
|
-
|
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 952</span>
|
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sint_digits10</span>
|
|
15
|
+
<span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@digits10</span>.<span class="ruby-identifier">nil?</span>)
|
|
16
|
+
<span class="ruby-ivar">@digits10</span> = <span class="ruby-constant">LongMath</span>.<span class="ruby-identifier">int_digits10</span>(<span class="ruby-identifier">int_val</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">scale</span>
|
|
17
|
+
<span class="ruby-keyword kw">end</span>
|
|
18
|
+
<span class="ruby-ivar">@digits10</span>
|
|
17
19
|
<span class="ruby-keyword kw">end</span></pre>
|
|
18
20
|
</body>
|
|
19
21
|
</html>
|