long-decimal 0.01.01 → 0.01.02

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. data/README +17 -94
  2. data/VERSION +1 -1
  3. data/doc/classes/Integer.html +239 -0
  4. data/doc/classes/Integer.src/M000036.html +18 -0
  5. data/doc/classes/Integer.src/M000039.html +145 -0
  6. data/doc/classes/LongDecimal.html +453 -399
  7. data/doc/classes/LongDecimal.src/M000040.html +4 -4
  8. data/doc/classes/LongDecimal.src/M000041.html +4 -4
  9. data/doc/classes/LongDecimal.src/M000042.html +4 -6
  10. data/doc/classes/LongDecimal.src/M000043.html +4 -106
  11. data/doc/classes/LongDecimal.src/M000044.html +4 -21
  12. data/doc/classes/LongDecimal.src/M000045.html +4 -11
  13. data/doc/classes/LongDecimal.src/M000046.html +6 -27
  14. data/doc/classes/LongDecimal.src/M000047.html +103 -16
  15. data/doc/classes/LongDecimal.src/M000048.html +21 -4
  16. data/doc/classes/LongDecimal.src/M000049.html +10 -14
  17. data/doc/classes/LongDecimal.src/M000050.html +22 -36
  18. data/doc/classes/LongDecimal.src/M000051.html +34 -4
  19. data/doc/classes/LongDecimal.src/M000052.html +17 -6
  20. data/doc/classes/LongDecimal.src/M000053.html +4 -6
  21. data/doc/classes/LongDecimal.src/M000054.html +15 -4
  22. data/doc/classes/LongDecimal.src/M000055.html +44 -12
  23. data/doc/classes/LongDecimal.src/M000056.html +4 -7
  24. data/doc/classes/LongDecimal.src/M000057.html +8 -4
  25. data/doc/classes/LongDecimal.src/M000058.html +6 -15
  26. data/doc/classes/LongDecimal.src/M000059.html +4 -13
  27. data/doc/classes/LongDecimal.src/M000060.html +15 -4
  28. data/doc/classes/LongDecimal.src/M000061.html +7 -5
  29. data/doc/classes/LongDecimal.src/M000062.html +4 -4
  30. data/doc/classes/LongDecimal.src/M000063.html +15 -5
  31. data/doc/classes/LongDecimal.src/M000064.html +13 -5
  32. data/doc/classes/LongDecimal.src/M000065.html +4 -4
  33. data/doc/classes/LongDecimal.src/M000067.html +4 -8
  34. data/doc/classes/LongDecimal.src/M000068.html +5 -9
  35. data/doc/classes/LongDecimal.src/M000069.html +5 -9
  36. data/doc/classes/LongDecimal.src/M000070.html +4 -9
  37. data/doc/classes/LongDecimal.src/M000071.html +4 -4
  38. data/doc/classes/LongDecimal.src/M000072.html +6 -17
  39. data/doc/classes/LongDecimal.src/M000073.html +7 -7
  40. data/doc/classes/LongDecimal.src/M000074.html +7 -7
  41. data/doc/classes/LongDecimal.src/M000075.html +7 -19
  42. data/doc/classes/LongDecimal.src/M000076.html +4 -8
  43. data/doc/classes/LongDecimal.src/M000077.html +19 -5
  44. data/doc/classes/LongDecimal.src/M000078.html +7 -7
  45. data/doc/classes/LongDecimal.src/M000079.html +7 -7
  46. data/doc/classes/LongDecimal.src/M000080.html +19 -7
  47. data/doc/classes/LongDecimal.src/M000081.html +8 -4
  48. data/doc/classes/LongDecimal.src/M000082.html +5 -7
  49. data/doc/classes/LongDecimal.src/M000083.html +8 -6
  50. data/doc/classes/LongDecimal.src/M000084.html +9 -4
  51. data/doc/classes/LongDecimal.src/M000085.html +9 -4
  52. data/doc/classes/LongDecimal.src/M000086.html +4 -9
  53. data/doc/classes/LongDecimal.src/M000087.html +6 -8
  54. data/doc/classes/LongDecimal.src/M000088.html +7 -5
  55. data/doc/classes/LongDecimal.src/M000089.html +4 -9
  56. data/doc/classes/LongDecimal.src/M000090.html +4 -4
  57. data/doc/classes/LongDecimal.src/M000091.html +9 -4
  58. data/doc/classes/LongDecimal.src/M000092.html +9 -4
  59. data/doc/classes/LongDecimal.src/M000093.html +5 -4
  60. data/doc/classes/LongDecimal.src/M000094.html +7 -57
  61. data/doc/classes/LongDecimal.src/M000095.html +4 -4
  62. data/doc/classes/LongDecimal.src/M000096.html +4 -4
  63. data/doc/classes/LongDecimal.src/M000097.html +4 -5
  64. data/doc/classes/LongDecimal.src/M000098.html +4 -5
  65. data/doc/classes/LongDecimal.src/M000099.html +59 -5
  66. data/doc/classes/LongDecimal.src/M000100.html +4 -5
  67. data/doc/classes/LongDecimal.src/M000101.html +4 -4
  68. data/doc/classes/LongDecimal.src/M000104.html +19 -0
  69. data/doc/classes/LongDecimal.src/M000105.html +19 -0
  70. data/doc/classes/LongDecimal.src/M000106.html +18 -0
  71. data/doc/classes/LongDecimal.src/M000107.html +18 -0
  72. data/doc/classes/LongDecimal.src/M000108.html +18 -0
  73. data/doc/classes/LongDecimal.src/M000109.html +18 -0
  74. data/doc/classes/LongDecimalBase.html +69 -66
  75. data/doc/classes/LongDecimalBase.src/M000113.html +4 -9
  76. data/doc/classes/LongDecimalBase.src/M000114.html +4 -5
  77. data/doc/classes/LongDecimalBase.src/M000115.html +4 -9
  78. data/doc/classes/LongDecimalBase.src/M000116.html +4 -9
  79. data/doc/classes/LongDecimalBase.src/M000117.html +4 -5
  80. data/doc/classes/LongDecimalBase.src/M000118.html +23 -0
  81. data/doc/classes/LongDecimalBase.src/M000121.html +23 -0
  82. data/doc/classes/LongDecimalBase.src/M000122.html +19 -0
  83. data/doc/classes/LongDecimalBase.src/M000123.html +18 -0
  84. data/doc/classes/LongDecimalQuot.html +33 -27
  85. data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
  86. data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
  87. data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
  88. data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
  89. data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
  90. data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
  91. data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
  92. data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
  93. data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
  94. data/doc/classes/LongDecimalQuot.src/M000012.html +1 -1
  95. data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
  96. data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
  97. data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
  98. data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
  99. data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
  100. data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
  101. data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
  102. data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
  103. data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
  104. data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
  105. data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
  106. data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
  107. data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
  108. data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
  109. data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
  110. data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
  111. data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
  112. data/doc/classes/LongDecimalQuot.src/M000030.html +1 -1
  113. data/doc/classes/LongDecimalQuot.src/M000031.html +1 -1
  114. data/doc/classes/LongDecimalQuot.src/M000034.html +1 -1
  115. data/doc/classes/LongDecimalQuot.src/M000035.html +1 -1
  116. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +25 -24
  117. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000156.html +22 -0
  118. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000157.html +18 -0
  119. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000158.html +18 -0
  120. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000159.html +18 -0
  121. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000161.html +25 -0
  122. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000162.html +18 -0
  123. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000163.html +18 -0
  124. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.src/M000164.html +18 -0
  125. data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.html +178 -0
  126. data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.src/M000165.html +25 -0
  127. data/doc/classes/LongDecimalRoundingMode/ZeroRoundingModeClass.src/M000166.html +18 -0
  128. data/doc/classes/LongDecimalRoundingMode.html +41 -4
  129. data/doc/classes/LongMath/CacheKey.html +10 -10
  130. data/doc/classes/LongMath/CacheKey.src/M000155.html +36 -0
  131. data/doc/classes/LongMath/CacheKey.src/M000160.html +36 -0
  132. data/doc/classes/LongMath.html +246 -235
  133. data/doc/classes/LongMath.src/M000124.html +5 -18
  134. data/doc/classes/LongMath.src/M000125.html +4 -18
  135. data/doc/classes/LongMath.src/M000126.html +4 -5
  136. data/doc/classes/LongMath.src/M000127.html +5 -29
  137. data/doc/classes/LongMath.src/M000128.html +4 -5
  138. data/doc/classes/LongMath.src/M000129.html +14 -53
  139. data/doc/classes/LongMath.src/M000130.html +17 -20
  140. data/doc/classes/LongMath.src/M000131.html +5 -36
  141. data/doc/classes/LongMath.src/M000132.html +29 -6
  142. data/doc/classes/LongMath.src/M000133.html +5 -33
  143. data/doc/classes/LongMath.src/M000134.html +47 -41
  144. data/doc/classes/LongMath.src/M000135.html +21 -7
  145. data/doc/classes/LongMath.src/M000136.html +36 -4
  146. data/doc/classes/LongMath.src/M000137.html +6 -4
  147. data/doc/classes/LongMath.src/M000138.html +31 -70
  148. data/doc/classes/LongMath.src/M000139.html +45 -38
  149. data/doc/classes/LongMath.src/M000140.html +7 -4
  150. data/doc/classes/LongMath.src/M000141.html +4 -4
  151. data/doc/classes/LongMath.src/M000142.html +4 -6
  152. data/doc/classes/LongMath.src/M000143.html +67 -14
  153. data/doc/classes/LongMath.src/M000144.html +39 -14
  154. data/doc/classes/LongMath.src/M000145.html +4 -44
  155. data/doc/classes/LongMath.src/M000146.html +5 -339
  156. data/doc/classes/LongMath.src/M000147.html +6 -25
  157. data/doc/classes/LongMath.src/M000148.html +14 -75
  158. data/doc/classes/LongMath.src/M000149.html +33 -0
  159. data/doc/classes/LongMath.src/M000150.html +58 -0
  160. data/doc/classes/LongMath.src/M000151.html +406 -0
  161. data/doc/classes/LongMath.src/M000152.html +63 -0
  162. data/doc/classes/LongMath.src/M000153.html +117 -0
  163. data/doc/classes/LongMath.src/M000154.html +150 -0
  164. data/doc/classes/LongMath.src/M000155.html +63 -0
  165. data/doc/classes/LongMath.src/M000156.html +18 -0
  166. data/doc/classes/LongMath.src/M000157.html +19 -0
  167. data/doc/classes/LongMath.src/M000158.html +18 -0
  168. data/doc/classes/LongMath.src/M000159.html +19 -0
  169. data/doc/classes/Numeric.html +23 -21
  170. data/doc/classes/Numeric.src/M000106.html +18 -0
  171. data/doc/classes/Numeric.src/M000110.html +23 -0
  172. data/doc/classes/Numeric.src/M000111.html +18 -0
  173. data/doc/classes/Rational.html +18 -16
  174. data/doc/classes/Rational.src/M000107.html +23 -0
  175. data/doc/classes/Rational.src/M000112.html +23 -0
  176. data/doc/created.rid +1 -1
  177. data/doc/dot/f_0.dot +23 -1
  178. data/doc/dot/f_0.png +0 -0
  179. data/doc/dot/m_0_0.png +0 -0
  180. data/doc/dot/m_0_1.dot +13 -0
  181. data/doc/dot/m_0_1.png +0 -0
  182. data/doc/files/lib/long-decimal_rb.html +15 -13
  183. data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
  184. data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
  185. data/doc/fr_class_index.html +2 -0
  186. data/doc/fr_method_index.html +131 -124
  187. data/lib/long-decimal.rb +373 -49
  188. data/test/testlongdecimal.rb +689 -7
  189. data/test/testlongdeclib.rb +51 -11
  190. data/test/testrandlib.rb +23 -7
  191. data/test/testrandom.rb +4 -4
  192. data/test/testrandpower.rb +11 -9
  193. metadata +48 -3
data/README CHANGED
@@ -2,7 +2,7 @@ Version
2
2
  -------
3
3
 
4
4
  This version ($Name: ALPHA_01_01 $) is functionally identical with the previous
5
- pre-alpha-0.22. The runit tests have been extended and further tests
5
+ alpha-0.01.00. The runit tests have been extended and further tests
6
6
  have been added. A lot of additional testing has been done using
7
7
  random numbers as parameters with testrandom.rb and values for which
8
8
  these random tests have failed have been added to the regular tests in
@@ -15,7 +15,7 @@ found directly with http://rubyforge.org/projects/long-decimal/ . So
15
15
  you should feel encouraged to look if there is a newer version, when
16
16
  you install long-decimal.
17
17
 
18
- This version is a alpha-version. Operations +, -, *, / and sqrt
18
+ This version is an alpha-version. Operations +, -, *, / and sqrt
19
19
  should be working properly and would justify calling this release at
20
20
  least beta. Even log, exp and power should be fine. log, log2, log10
21
21
  and exp have been tested for about a million random values and the
@@ -30,8 +30,8 @@ rounded up or down. Because these functions are transcendental, at
30
30
  least exp and log will always have either one of these true, it will
31
31
  never be exactly ....5. Speed could be improved as well.
32
32
 
33
- It would be a good idea to do some mathematical analysis on how many
34
- digits are needed internally to guarantee the correctness of the
33
+ It would be a good idea to do some more mathematical analysis on how
34
+ many digits are needed internally to guarantee the correctness of the
35
35
  digits that are provided. But this will not be considered as a
36
36
  requirement for the alpha-version.
37
37
 
@@ -50,86 +50,27 @@ your machine. It is about 15 minutes on my machine (1300 MHz).
50
50
  Whatever is gained by making the software run faster is used up again
51
51
  by adding more tests. This is the result of the test:
52
52
 
53
- Finished in 1131.2352 seconds.
54
- 128 tests, 45190 assertions, 0 failures, 0 errors
53
+ Finished in 1160.808707 seconds.
55
54
 
56
- In addition random tests for exp, log, log2 and log10 can be run for a
57
- long time, using the script test/testrandom.rb. This requires
58
- installation of the ruby-library crypt-isaac for its random numbers.
59
- If you actually want to run this and find an error with it, please
60
- report it with the lines of output revealing the bug on
61
- http://rubyforge.org/projects/long-decimal/ -> tracker
62
-
63
- Install
64
- -------
65
-
66
- (REMARK: installation has only been successfully tested on Linux with
67
- ruby 1.8.4 and on Windows 2000 with ruby 1.8.2)
68
-
69
- 1. Using ruby-gems (preferred)
70
- - open a shell window
71
- - become root, unless the current user has the right to install gems
72
- (which is usually the case on windows)
73
-
74
- su
75
-
76
- - uninstall old versions
77
-
78
- gem uninstall long-decimal
79
-
80
- - install the newest version
81
-
82
- gem install long-decimal
83
-
84
- - Usage from your ruby-programs:
85
-
86
- require "rubygems"
87
- require_gem "long-decimal"
88
-
89
- - documentation will be found in HTML-format in the directory
90
- $RUBY_DIR/gems/$RUBY_VERSION/doc/long-decimal-$LONG_DECIMAL_VERSION/rdoc/index.html
91
- where $RUBY_DIR is the directory containing your ruby-installation,
92
- usually /usr/lib/ruby or /usr/local/lib/ruby on
93
- Linux/Unix-systems.
94
- $RUBY_VERSION is the major version of your Ruby, like 1.8
95
- $LONG_DECIMAL_VERSION is the version of long-decimal that you
96
- have installed, like 0.00.20
97
- on my machine that would be
98
- /usr/local/lib/ruby/gems/1.8/doc/long-decimal-0.00.20/rdoc/index.html
99
-
100
- 2. Installing from the sources (it is preferred to use the
101
- gem-installation, but since long-decimal is open-source-software you
102
- are off course granted the right to download the source and change
103
- it and install your own version.
104
-
105
- - download the newest source-tar.gz-file from long-decimal project at rubyforge
106
- which can be found by
107
- http://rubyforge.org/projects/long-decimal/ -> Files
108
- ( http://rubyforge.org/frs/?group_id=1334 )
109
- - open a shell window
110
- cd to the directory where you have downloaded the gem-file
111
- unpack the file using tar
112
- tar xfzvv long-decimal-alpha-1_00.tar.gz
113
- cd long-decimal
114
- - now you can use rake for several operations
115
- - rake test
116
- runs runit tests. All tests should succeed.
117
- - rake doc
118
- creates the documentation
119
- - rake gem creates the gem-file in a sub-directory pkg
120
- recommended for installation, proceed as in 1
121
- - cd pkg
122
- - gem install --local long-decimal
55
+ 131 tests, 45612 assertions, 0 failures, 0 errors
123
56
 
57
+ In addition random tests for exp, exp2, exp10, sqrt, log, log2 and
58
+ log10 can be run for a long time, using the script test/testrandom.rb.
59
+ Likewise tests for powers x to the yth with random x and y can be
60
+ tested for a long time using test/testrandpower.rb
124
61
 
125
- 3. The documentation can be created from the sources. It is contained
126
- in the gem-file. It is not provided as a separate file any more.
62
+ These two require installation of the ruby-library crypt-isaac for its
63
+ random numbers, which works well with Linux or Windows and Cygwin. If
64
+ you actually want to run this and find an error with it, please report
65
+ it with the lines of output revealing the bug on
66
+ http://rubyforge.org/projects/long-decimal/ -> tracker
127
67
 
128
68
  Install
129
69
  -------
130
70
 
131
71
  (REMARK: installation has only been successfully tested on Linux with
132
- ruby 1.8.4 and on Windows 2000 with ruby 1.8.2)
72
+ ruby 1.8.4 and on Windows XP with Cygwin and ruby 1.8.4 and on Windows
73
+ 2000 with ruby 1.8.2)
133
74
 
134
75
  1. Using ruby-gems (preferred)
135
76
  - open a shell window
@@ -190,24 +131,6 @@ ruby 1.8.4 and on Windows 2000 with ruby 1.8.2)
190
131
  3. The documentation can be created from the sources. It is contained
191
132
  in the gem-file. It is not provided as a separate file any more.
192
133
 
193
- Test
194
- ----
195
-
196
- Some runit tests have been included. They give some indication of the
197
- correctness of this library and allow changes to be checked in order
198
- to make sure that what was running before would still work afterwards.
199
- Tests for a library as complex as long-decimal can never be
200
- exhaustive, but they give a good indication that methods are working
201
- correctly. About 95% of the tests that will be eventually needed are
202
- already present. As a policy a release is not created unless all
203
- tests succeed. Running the tests can take a few minutes, depending on
204
- your machine. It is about 15 minutes on my machine (1300 MHz).
205
- Whatever is gained by making the software run faster is used up again
206
- by adding more tests. This is the result of the test:
207
-
208
- Finished in 1131.2352 seconds.
209
- 128 tests, 45190 assertions, 0 failures, 0 errors
210
-
211
134
  Bugs
212
135
  ----
213
136
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.01.01
1
+ 0.01.02
@@ -0,0 +1,239 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Integer</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Integer</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/long-decimal_rb.html">
59
+ lib/long-decimal.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ Object
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+ <div id="diagram">
81
+ <map id="map" name="map">
82
+ <area shape="rect" coords="94,7,171,55" href="Comparable.html" alt="Comparable" />
83
+ <area shape="rect" coords="158,206,235,254" href="LongMath/CacheKey.html" alt="CacheKey" />
84
+ <area shape="rect" coords="231,103,356,151" href="LongDecimalRoundingMode/RoundingModeClass.html" alt="RoundingModeClass" />
85
+ <area shape="rect" coords="58,103,207,151" href="LongDecimalRoundingMode/ZeroRoundingModeClass.html" alt="ZeroRoundingModeClass" />
86
+ <area shape="rect" coords="355,206,470,254" href="LongDecimalBase.html" alt="LongDecimalBase" />
87
+ <area shape="rect" coords="294,302,406,350" href="LongDecimalQuot.html" alt="LongDecimalQuot" />
88
+ <area shape="rect" coords="195,7,267,55" href="Integer.html" alt="Integer" />
89
+ <area shape="rect" coords="430,302,520,350" href="LongDecimal.html" alt="LongDecimal" />
90
+ <area shape="rect" coords="407,103,479,151" href="Numeric.html" alt="Numeric" />
91
+ <area shape="rect" coords="291,7,363,55" href="Rational.html" alt="Rational" />
92
+ <area shape="rect" coords="147,172,272,264" href="LongMath.html" alt="LongMath" />
93
+ <area shape="rect" coords="47,70,394,162" href="LongDecimalRoundingMode.html" alt="LongDecimalRoundingMode" />
94
+ </map>
95
+ <img src="../dot/f_0.png" usemap="#map" border="0" alt="dot/f_0.png">
96
+ </div>
97
+
98
+ <div id="description">
99
+ <p>
100
+ add one method to <a href="Integer.html">Integer</a>
101
+ </p>
102
+
103
+ </div>
104
+
105
+
106
+ </div>
107
+
108
+ <div id="method-list">
109
+ <h3 class="section-bar">Methods</h3>
110
+
111
+ <div class="name-list">
112
+ <a href="#M000039">round_to_allowed_remainders</a>&nbsp;&nbsp;
113
+ <a href="#M000036">sgn</a>&nbsp;&nbsp;
114
+ <a href="#M000038">sign</a>&nbsp;&nbsp;
115
+ <a href="#M000037">signum</a>&nbsp;&nbsp;
116
+ </div>
117
+ </div>
118
+
119
+ </div>
120
+
121
+
122
+ <!-- if includes -->
123
+
124
+ <div id="section">
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+ <!-- if method_list -->
134
+ <div id="methods">
135
+ <h3 class="section-bar">Public Instance methods</h3>
136
+
137
+ <div id="method-M000039" class="method-detail">
138
+ <a name="M000039"></a>
139
+
140
+ <div class="method-heading">
141
+ <a href="Integer.src/M000039.html" target="Code" class="method-signature"
142
+ onclick="popupCode('Integer.src/M000039.html');return false;">
143
+ <span class="method-name">round_to_allowed_remainders</span><span class="method-args">(remainders, modulus, rounding_mode = LongDecimalRoundingMode::ROUND_UNNECESSARY, zero_rounding_mode = LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)</span>
144
+ </a>
145
+ </div>
146
+
147
+ <div class="method-description">
148
+ <p>
149
+ create copy of self round in such a way that the result is congruent modulo
150
+ modulus to one of the members of remainders
151
+ </p>
152
+ <p>
153
+ param1: remainders array of allowed remainders param2: modulus modulus of
154
+ the remainders param3: rounding_mode rounding mode to be applied when
155
+ information is
156
+ </p>
157
+ <pre>
158
+ lost. defaults to ROUND_UNNECESSARY, which
159
+ means that an exception is thrown if rounding
160
+ would actually loose any information.
161
+ </pre>
162
+ <p>
163
+ param4: zero_rounding_mode if self is zero, but zero is not among
164
+ </p>
165
+ <pre>
166
+ the available remainders, it has to be
167
+ rounded to positive or negative value.
168
+ If the rounding_mode does not allow to
169
+ determine which of the two values to
170
+ use, zero_rounding_mode has to be used
171
+ to decide.
172
+ </pre>
173
+ </div>
174
+ </div>
175
+
176
+ <div id="method-M000036" class="method-detail">
177
+ <a name="M000036"></a>
178
+
179
+ <div class="method-heading">
180
+ <a href="Integer.src/M000036.html" target="Code" class="method-signature"
181
+ onclick="popupCode('Integer.src/M000036.html');return false;">
182
+ <span class="method-name">sgn</span><span class="method-args">()</span>
183
+ </a>
184
+ </div>
185
+
186
+ <div class="method-description">
187
+ <p>
188
+ get the <a href="Integer.html#M000038">sign</a> of self -1 if self &lt; 0
189
+ </p>
190
+ <pre>
191
+ 0 if self is 0 (with any number of 0s after the decimal point)
192
+ </pre>
193
+ <p>
194
+ +1 if self &gt; 0
195
+ </p>
196
+ </div>
197
+ </div>
198
+
199
+ <div id="method-M000038" class="method-detail">
200
+ <a name="M000038"></a>
201
+
202
+ <div class="method-heading">
203
+ <span class="method-name">sign</span><span class="method-args">()</span>
204
+ </div>
205
+
206
+ <div class="method-description">
207
+ <p>
208
+ Alias for <a href="Integer.html#M000036">sgn</a>
209
+ </p>
210
+ </div>
211
+ </div>
212
+
213
+ <div id="method-M000037" class="method-detail">
214
+ <a name="M000037"></a>
215
+
216
+ <div class="method-heading">
217
+ <span class="method-name">signum</span><span class="method-args">()</span>
218
+ </div>
219
+
220
+ <div class="method-description">
221
+ <p>
222
+ Alias for <a href="Integer.html#M000036">sgn</a>
223
+ </p>
224
+ </div>
225
+ </div>
226
+
227
+
228
+ </div>
229
+
230
+
231
+ </div>
232
+
233
+
234
+ <div id="validator-badges">
235
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
236
+ </div>
237
+
238
+ </body>
239
+ </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>sgn (Integer)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 154</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sgn</span>
15
+ <span class="ruby-keyword kw">self</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-value">0</span>
16
+ <span class="ruby-keyword kw">end</span></pre>
17
+ </body>
18
+ </html>
@@ -0,0 +1,145 @@
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_allowed_remainders (Integer)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/long-decimal.rb, line 179</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">round_to_allowed_remainders</span>(<span class="ruby-identifier">remainders</span>,
15
+ <span class="ruby-identifier">modulus</span>,
16
+ <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>,
17
+ <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>)
18
+
19
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">&quot;remainders must be Array&quot;</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>
20
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">&quot;remainders must be non-empty Array&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
21
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;modulus #{modulus.inspect} must be integer&quot;</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>
22
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;modulus #{modulus.inspect} must be &gt;= 2&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">modulus</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">2</span>
23
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;rounding_mode #{rounding_mode.inspect} must be legal rounding rounding_mode&quot;</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">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">RoundingModeClass</span>
24
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">&quot;ROUND_HALF_EVEN is not applicable here&quot;</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>
25
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;zero_rounding_mode #{zero_rounding_mode.inspect} must be legal zero_rounding zero_rounding_mode&quot;</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">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZeroRoundingModeClass</span>
26
+
27
+ <span class="ruby-identifier">r_self</span> = <span class="ruby-keyword kw">self</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">modulus</span>
28
+ <span class="ruby-identifier">r_self_00</span> = <span class="ruby-identifier">r_self</span>
29
+ <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>
30
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-value str">&quot;remainders must be numbers&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">r</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Integer</span>
31
+ <span class="ruby-identifier">r</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">modulus</span>
32
+ <span class="ruby-keyword kw">end</span>
33
+ <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">uniq!</span>
34
+ <span class="ruby-identifier">r_first</span> = <span class="ruby-identifier">remainders</span>[<span class="ruby-value">0</span>]
35
+ <span class="ruby-identifier">r_last</span> = <span class="ruby-identifier">remainders</span>[<span class="ruby-value">-1</span>]
36
+ <span class="ruby-identifier">r_first_again</span> = <span class="ruby-identifier">r_first</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">modulus</span>
37
+ <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">r_first_again</span>
38
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">r_self</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">r_first</span>) <span class="ruby-keyword kw">then</span>
39
+ <span class="ruby-identifier">r_self</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">modulus</span>
40
+ <span class="ruby-keyword kw">end</span>
41
+ <span class="ruby-comment cmt"># puts &quot;r_self=#{r_self_00}-&gt;#{r_self} r_first=#{r_first} r_last=#{r_last} r_first_again=#{r_first_again}&quot;</span>
42
+ <span class="ruby-identifier">r_lower</span> = <span class="ruby-value">-1</span>
43
+ <span class="ruby-identifier">r_upper</span> = <span class="ruby-value">-1</span>
44
+ <span class="ruby-identifier">remainders</span>.<span class="ruby-identifier">each_index</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
45
+ <span class="ruby-identifier">r</span> = <span class="ruby-identifier">remainders</span>[<span class="ruby-identifier">i</span>]
46
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">r</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">r_self</span>) <span class="ruby-keyword kw">then</span>
47
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">self</span>
48
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">r</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">r_self</span>) <span class="ruby-keyword kw">then</span>
49
+ <span class="ruby-identifier">r_lower</span> = <span class="ruby-identifier">r</span>
50
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">r</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">r_self</span>) <span class="ruby-keyword kw">then</span>
51
+ <span class="ruby-identifier">r_upper</span> = <span class="ruby-identifier">r</span>
52
+ <span class="ruby-keyword kw">break</span>
53
+ <span class="ruby-keyword kw">end</span>
54
+ <span class="ruby-keyword kw">end</span>
55
+ <span class="ruby-identifier">lower</span> = <span class="ruby-keyword kw">self</span> <span class="ruby-operator">-</span> (<span class="ruby-identifier">r_self</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">r_lower</span>)
56
+ <span class="ruby-identifier">upper</span> = <span class="ruby-keyword kw">self</span> <span class="ruby-operator">+</span> (<span class="ruby-identifier">r_upper</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">r_self</span>)
57
+ <span class="ruby-comment cmt"># puts &quot;r_lower=#{r_lower} r_upper=#{r_upper} lower=#{lower} upper=#{upper} s=#{self}&quot;</span>
58
+
59
+ <span class="ruby-keyword kw">unless</span> (<span class="ruby-identifier">lower</span> <span class="ruby-operator">&lt;</span> <span class="ruby-keyword kw">self</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-keyword kw">self</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">upper</span>)
60
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;self=#{self} not in (#{lower}, #{upper})&quot;</span>
61
+ <span class="ruby-keyword kw">end</span>
62
+ <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_UNNECESSARY</span>) <span class="ruby-keyword kw">then</span>
63
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;mode ROUND_UNNECESSARY not applicable, self=#{self.to_s} is in open interval (#{lower}, #{upper})&quot;</span>
64
+ <span class="ruby-keyword kw">end</span>
65
+
66
+ <span class="ruby-comment cmt"># if (rounding_mode == LongDecimalRoundingMode::ROUND_FLOOR) then</span>
67
+ <span class="ruby-comment cmt"># return lower</span>
68
+ <span class="ruby-comment cmt"># elsif (rounding_mode == LongDecimalRoundingMode::ROUND_CEILING) then</span>
69
+ <span class="ruby-comment cmt"># return upper</span>
70
+ <span class="ruby-comment cmt"># end</span>
71
+
72
+ <span class="ruby-identifier">sign_self</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">sign</span>
73
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">sign_self</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
74
+ <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_UP</span> <span class="ruby-operator">||</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_DOWN</span> \
75
+ <span class="ruby-operator">||</span> <span class="ruby-identifier">lower</span> <span class="ruby-operator">==</span> <span class="ruby-operator">-</span><span class="ruby-identifier">upper</span> <span class="ruby-operator">&amp;&amp;</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_UP</span> <span class="ruby-operator">||</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_DOWN</span>))
76
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">zero_rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_UNNECESSARY</span>) <span class="ruby-keyword kw">then</span>
77
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;self=#{self.to_s} is 0 in open interval (#{lower}, #{upper}) and cannot be resolved with ZERO_ROUND_UNNECESSARY&quot;</span>
78
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">zero_rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_TO_CLOSEST_PREFER_PLUS</span> \
79
+ <span class="ruby-operator">||</span> <span class="ruby-identifier">zero_rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_TO_CLOSEST_PREFER_MINUS</span>) <span class="ruby-keyword kw">then</span>
80
+ <span class="ruby-identifier">diff</span> = <span class="ruby-identifier">lower</span>.<span class="ruby-identifier">abs</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">upper</span>.<span class="ruby-identifier">abs</span>
81
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">diff</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
82
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">lower</span>
83
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">diff</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword kw">then</span>
84
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">upper</span>
85
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">zero_rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_TO_CLOSEST_PREFER_PLUS</span>) <span class="ruby-keyword kw">then</span>
86
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">upper</span>
87
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">zero_rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_TO_CLOSEST_PREFER_MINUS</span>) <span class="ruby-keyword kw">then</span>
88
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">lower</span>
89
+ <span class="ruby-keyword kw">else</span>
90
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;this case can never happen: zero_rounding_mode=#{zero_rounding_mode}&quot;</span>
91
+ <span class="ruby-keyword kw">end</span>
92
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">zero_rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_TO_PLUS</span>) <span class="ruby-keyword kw">then</span>
93
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">upper</span>
94
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">zero_rounding_mode</span> <span class="ruby-operator">==</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ZERO_ROUND_TO_MINUS</span>) <span class="ruby-keyword kw">then</span>
95
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">lower</span>
96
+ <span class="ruby-keyword kw">else</span>
97
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;this case can never happen: zero_rounding_mode=#{zero_rounding_mode}&quot;</span>
98
+ <span class="ruby-keyword kw">end</span>
99
+ <span class="ruby-keyword kw">end</span>
100
+ <span class="ruby-keyword kw">end</span>
101
+
102
+ <span class="ruby-comment cmt"># now we can assume that sign_self (and self) is != 0, which allows to decide on the rounding_mode</span>
103
+
104
+ <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_UP</span>)
105
+ <span class="ruby-comment cmt"># ROUND_UP goes to the closest possible value away from zero</span>
106
+ <span class="ruby-identifier">rounding_mode</span> = (<span class="ruby-identifier">sign_self</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_FLOOR</span> <span class="ruby-operator">:</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_CEILING</span>
107
+ <span class="ruby-keyword kw">elsif</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_DOWN</span>)
108
+ <span class="ruby-comment cmt"># ROUND_DOWN goes to the closest possible value towards zero or beyond zero</span>
109
+ <span class="ruby-identifier">rounding_mode</span> = (<span class="ruby-identifier">sign_self</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_CEILING</span> <span class="ruby-operator">:</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_FLOOR</span>
110
+ <span class="ruby-keyword kw">elsif</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_UP</span>)
111
+ <span class="ruby-comment cmt"># ROUND_HALF_UP goes to the closest possible value preferring away from zero</span>
112
+ <span class="ruby-identifier">rounding_mode</span> = (<span class="ruby-identifier">sign_self</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_FLOOR</span> <span class="ruby-operator">:</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_CEILING</span>
113
+ <span class="ruby-keyword kw">elsif</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_DOWN</span>)
114
+ <span class="ruby-comment cmt"># ROUND_HALF_DOWN goes to the closest possible value preferring towards zero or beyond zero</span>
115
+ <span class="ruby-identifier">rounding_mode</span> = (<span class="ruby-identifier">sign_self</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>) <span class="ruby-operator">?</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_CEILING</span> <span class="ruby-operator">:</span> <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_HALF_FLOOR</span>
116
+ <span class="ruby-keyword kw">end</span>
117
+ <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_FLOOR</span> \
118
+ <span class="ruby-operator">||</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_CEILING</span>) <span class="ruby-keyword kw">then</span>
119
+ <span class="ruby-identifier">d_lower</span> = <span class="ruby-keyword kw">self</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">lower</span>
120
+ <span class="ruby-identifier">d_upper</span> = <span class="ruby-identifier">upper</span> <span class="ruby-operator">-</span> <span class="ruby-keyword kw">self</span>
121
+ <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">d_lower</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">d_upper</span>) <span class="ruby-keyword kw">then</span>
122
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">lower</span>
123
+ <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">d_upper</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">d_lower</span>) <span class="ruby-keyword kw">then</span>
124
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">upper</span>
125
+ <span class="ruby-keyword kw">elsif</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_FLOOR</span>) <span class="ruby-keyword kw">then</span>
126
+ <span class="ruby-identifier">rounding_mode</span> = <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_FLOOR</span>
127
+ <span class="ruby-keyword kw">elsif</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_CEILING</span>) <span class="ruby-keyword kw">then</span>
128
+ <span class="ruby-identifier">rounding_mode</span> = <span class="ruby-constant">LongDecimalRoundingMode</span><span class="ruby-operator">::</span><span class="ruby-constant">ROUND_CEILING</span>
129
+ <span class="ruby-keyword kw">else</span>
130
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;this case can never happen: rounding_mode=#{rounding_mode}&quot;</span>
131
+ <span class="ruby-keyword kw">end</span>
132
+ <span class="ruby-keyword kw">end</span>
133
+
134
+ <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_FLOOR</span>) <span class="ruby-keyword kw">then</span>
135
+ <span class="ruby-comment cmt"># puts &quot;floor/lower r_lower=#{r_lower} r_upper=#{r_upper} lower=#{lower} upper=#{upper} s=#{self}&quot;</span>
136
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">lower</span>
137
+ <span class="ruby-keyword kw">elsif</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_CEILING</span>) <span class="ruby-keyword kw">then</span>
138
+ <span class="ruby-comment cmt"># puts &quot;ceiling/upper r_lower=#{r_lower} r_upper=#{r_upper} lower=#{lower} upper=#{upper} s=#{self}&quot;</span>
139
+ <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">upper</span>
140
+ <span class="ruby-keyword kw">else</span>
141
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">Error</span>, <span class="ruby-node">&quot;this case can never happen: rounding_mode=#{rounding_mode}&quot;</span>
142
+ <span class="ruby-keyword kw">end</span>
143
+ <span class="ruby-keyword kw">end</span></pre>
144
+ </body>
145
+ </html>