rbs 2.0.0 → 2.2.2

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.
Files changed (208) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +34 -0
  3. data/.github/workflows/ruby.yml +5 -0
  4. data/CHANGELOG.md +82 -0
  5. data/README.md +6 -1
  6. data/Rakefile +56 -21
  7. data/core/array.rbs +2866 -1086
  8. data/core/basic_object.rbs +150 -30
  9. data/core/binding.rbs +33 -0
  10. data/core/builtin.rbs +4 -4
  11. data/core/class.rbs +43 -5
  12. data/core/comparable.rbs +57 -0
  13. data/core/complex.rbs +170 -4
  14. data/core/constants.rbs +51 -0
  15. data/core/deprecated.rbs +7 -0
  16. data/core/dir.rbs +305 -20
  17. data/core/encoding.rbs +1214 -77
  18. data/core/enumerable.rbs +2173 -234
  19. data/core/enumerator.rbs +448 -182
  20. data/core/env.rbs +448 -1
  21. data/core/errno.rbs +1 -10
  22. data/core/errors.rbs +152 -2
  23. data/core/exception.rbs +201 -127
  24. data/core/false_class.rbs +27 -0
  25. data/core/fiber.rbs +118 -37
  26. data/core/fiber_error.rbs +8 -9
  27. data/core/file.rbs +1060 -142
  28. data/core/file_test.rbs +287 -32
  29. data/core/float.rbs +776 -300
  30. data/core/gc.rbs +185 -34
  31. data/core/global_variables.rbs +5 -1
  32. data/core/hash.rbs +1582 -649
  33. data/core/integer.rbs +974 -204
  34. data/core/io/buffer.rbs +710 -0
  35. data/core/io/wait.rbs +29 -8
  36. data/core/io.rbs +2438 -417
  37. data/core/kernel.rbs +2319 -318
  38. data/core/marshal.rbs +37 -2
  39. data/core/match_data.rbs +123 -6
  40. data/core/math.rbs +126 -6
  41. data/core/method.rbs +226 -102
  42. data/core/module.rbs +421 -45
  43. data/core/nil_class.rbs +64 -0
  44. data/core/numeric.rbs +620 -142
  45. data/core/object.rbs +453 -81
  46. data/core/object_space.rbs +92 -2
  47. data/core/proc.rbs +482 -285
  48. data/core/process.rbs +443 -34
  49. data/core/ractor.rbs +232 -9
  50. data/core/random.rbs +151 -52
  51. data/core/range.rbs +885 -160
  52. data/core/rational.rbs +122 -6
  53. data/core/rb_config.rbs +14 -4
  54. data/core/refinement.rbs +44 -0
  55. data/core/regexp.rbs +156 -14
  56. data/core/ruby_vm.rbs +42 -3
  57. data/core/signal.rbs +78 -39
  58. data/core/string.rbs +2123 -567
  59. data/core/string_io.rbs +204 -0
  60. data/core/struct.rbs +283 -28
  61. data/core/symbol.rbs +304 -30
  62. data/core/thread.rbs +1288 -688
  63. data/core/thread_group.rbs +66 -10
  64. data/core/time.rbs +643 -217
  65. data/core/trace_point.rbs +100 -12
  66. data/core/true_class.rbs +24 -0
  67. data/core/unbound_method.rbs +73 -7
  68. data/core/warning.rbs +37 -12
  69. data/docs/CONTRIBUTING.md +40 -34
  70. data/docs/stdlib.md +3 -102
  71. data/docs/syntax.md +54 -11
  72. data/ext/rbs_extension/extconf.rb +1 -0
  73. data/ext/rbs_extension/lexer.h +5 -0
  74. data/ext/rbs_extension/lexstate.c +6 -0
  75. data/ext/rbs_extension/parser.c +85 -10
  76. data/ext/rbs_extension/ruby_objs.c +4 -2
  77. data/ext/rbs_extension/ruby_objs.h +2 -2
  78. data/goodcheck.yml +0 -11
  79. data/lib/rbs/annotate/annotations.rb +197 -0
  80. data/lib/rbs/annotate/formatter.rb +80 -0
  81. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  82. data/lib/rbs/annotate/rdoc_source.rb +120 -0
  83. data/lib/rbs/annotate.rb +6 -0
  84. data/lib/rbs/ast/members.rb +21 -13
  85. data/lib/rbs/buffer.rb +17 -11
  86. data/lib/rbs/cli.rb +48 -1
  87. data/lib/rbs/definition_builder/method_builder.rb +28 -16
  88. data/lib/rbs/definition_builder.rb +6 -2
  89. data/lib/rbs/environment.rb +8 -4
  90. data/lib/rbs/location_aux.rb +12 -0
  91. data/lib/rbs/namespace.rb +1 -1
  92. data/lib/rbs/prototype/rb.rb +12 -0
  93. data/lib/rbs/type_alias_regularity.rb +6 -4
  94. data/lib/rbs/type_name.rb +1 -1
  95. data/lib/rbs/types.rb +1 -1
  96. data/lib/rbs/validator.rb +6 -0
  97. data/lib/rbs/version.rb +1 -1
  98. data/lib/rbs/writer.rb +54 -4
  99. data/lib/rbs.rb +0 -2
  100. data/schema/typeParam.json +3 -3
  101. data/sig/annotate/annotations.rbs +102 -0
  102. data/sig/annotate/formatter.rbs +24 -0
  103. data/sig/annotate/rdoc_annotater.rbs +82 -0
  104. data/sig/annotate/rdoc_source.rbs +30 -0
  105. data/sig/buffer.rbs +6 -2
  106. data/sig/cli.rbs +2 -0
  107. data/sig/collection/{collections.rbs → sources.rbs} +0 -0
  108. data/sig/location.rbs +6 -0
  109. data/sig/members.rbs +24 -18
  110. data/sig/method_builder.rbs +5 -4
  111. data/sig/method_types.rbs +5 -1
  112. data/sig/polyfill.rbs +78 -0
  113. data/sig/validator.rbs +3 -1
  114. data/sig/writer.rbs +79 -2
  115. data/stdlib/abbrev/0/abbrev.rbs +6 -0
  116. data/stdlib/abbrev/0/array.rbs +26 -0
  117. data/stdlib/base64/0/base64.rbs +31 -0
  118. data/stdlib/benchmark/0/benchmark.rbs +74 -3
  119. data/stdlib/bigdecimal/0/big_decimal.rbs +614 -165
  120. data/stdlib/bigdecimal-math/0/big_math.rbs +41 -64
  121. data/stdlib/cgi/0/core.rbs +649 -21
  122. data/stdlib/coverage/0/coverage.rbs +164 -2
  123. data/stdlib/csv/0/csv.rbs +2862 -398
  124. data/stdlib/date/0/date.rbs +483 -25
  125. data/stdlib/date/0/date_time.rbs +187 -12
  126. data/stdlib/dbm/0/dbm.rbs +152 -17
  127. data/stdlib/digest/0/digest.rbs +146 -0
  128. data/stdlib/erb/0/erb.rbs +65 -245
  129. data/stdlib/fiber/0/fiber.rbs +73 -91
  130. data/stdlib/fileutils/0/fileutils.rbs +301 -1
  131. data/stdlib/find/0/find.rbs +9 -0
  132. data/stdlib/forwardable/0/forwardable.rbs +65 -1
  133. data/stdlib/io-console/0/io-console.rbs +227 -15
  134. data/stdlib/ipaddr/0/ipaddr.rbs +161 -0
  135. data/stdlib/json/0/json.rbs +1147 -145
  136. data/stdlib/logger/0/formatter.rbs +24 -0
  137. data/stdlib/logger/0/log_device.rbs +64 -0
  138. data/stdlib/logger/0/logger.rbs +165 -13
  139. data/stdlib/logger/0/period.rbs +10 -0
  140. data/stdlib/logger/0/severity.rbs +26 -0
  141. data/stdlib/monitor/0/monitor.rbs +163 -0
  142. data/stdlib/mutex_m/0/mutex_m.rbs +35 -6
  143. data/stdlib/net-http/0/manifest.yaml +1 -0
  144. data/stdlib/net-http/0/net-http.rbs +1513 -683
  145. data/stdlib/nkf/0/nkf.rbs +372 -0
  146. data/stdlib/objspace/0/objspace.rbs +149 -90
  147. data/stdlib/openssl/0/openssl.rbs +8108 -71
  148. data/stdlib/optparse/0/optparse.rbs +487 -19
  149. data/stdlib/pathname/0/pathname.rbs +425 -124
  150. data/stdlib/prettyprint/0/prettyprint.rbs +120 -99
  151. data/stdlib/prime/0/integer-extension.rbs +20 -2
  152. data/stdlib/prime/0/prime.rbs +88 -21
  153. data/stdlib/pstore/0/pstore.rbs +102 -0
  154. data/stdlib/pty/0/pty.rbs +64 -14
  155. data/stdlib/resolv/0/resolv.rbs +420 -31
  156. data/stdlib/rubygems/0/basic_specification.rbs +4 -1
  157. data/stdlib/rubygems/0/config_file.rbs +33 -1
  158. data/stdlib/rubygems/0/dependency_installer.rbs +4 -3
  159. data/stdlib/rubygems/0/installer.rbs +13 -1
  160. data/stdlib/rubygems/0/path_support.rbs +4 -1
  161. data/stdlib/rubygems/0/platform.rbs +5 -1
  162. data/stdlib/rubygems/0/request_set.rbs +44 -2
  163. data/stdlib/rubygems/0/requirement.rbs +65 -2
  164. data/stdlib/rubygems/0/rubygems.rbs +407 -0
  165. data/stdlib/rubygems/0/source_list.rbs +13 -0
  166. data/stdlib/rubygems/0/specification.rbs +21 -1
  167. data/stdlib/rubygems/0/stream_ui.rbs +3 -1
  168. data/stdlib/rubygems/0/uninstaller.rbs +8 -1
  169. data/stdlib/rubygems/0/version.rbs +60 -157
  170. data/stdlib/securerandom/0/securerandom.rbs +44 -0
  171. data/stdlib/set/0/set.rbs +423 -109
  172. data/stdlib/shellwords/0/shellwords.rbs +55 -77
  173. data/stdlib/singleton/0/singleton.rbs +20 -0
  174. data/stdlib/socket/0/addrinfo.rbs +210 -9
  175. data/stdlib/socket/0/basic_socket.rbs +103 -11
  176. data/stdlib/socket/0/ip_socket.rbs +31 -9
  177. data/stdlib/socket/0/socket.rbs +586 -38
  178. data/stdlib/socket/0/tcp_server.rbs +22 -2
  179. data/stdlib/socket/0/tcp_socket.rbs +12 -1
  180. data/stdlib/socket/0/udp_socket.rbs +25 -2
  181. data/stdlib/socket/0/unix_server.rbs +22 -2
  182. data/stdlib/socket/0/unix_socket.rbs +45 -5
  183. data/stdlib/strscan/0/string_scanner.rbs +210 -9
  184. data/stdlib/tempfile/0/tempfile.rbs +58 -10
  185. data/stdlib/time/0/time.rbs +208 -116
  186. data/stdlib/timeout/0/timeout.rbs +10 -0
  187. data/stdlib/tmpdir/0/tmpdir.rbs +13 -4
  188. data/stdlib/tsort/0/cyclic.rbs +1 -0
  189. data/stdlib/tsort/0/interfaces.rbs +1 -0
  190. data/stdlib/tsort/0/tsort.rbs +42 -0
  191. data/stdlib/uri/0/common.rbs +57 -8
  192. data/stdlib/uri/0/file.rbs +55 -109
  193. data/stdlib/uri/0/ftp.rbs +6 -3
  194. data/stdlib/uri/0/generic.rbs +558 -329
  195. data/stdlib/uri/0/http.rbs +60 -114
  196. data/stdlib/uri/0/https.rbs +8 -102
  197. data/stdlib/uri/0/ldap.rbs +143 -137
  198. data/stdlib/uri/0/ldaps.rbs +8 -102
  199. data/stdlib/uri/0/mailto.rbs +3 -0
  200. data/stdlib/uri/0/rfc2396_parser.rbs +66 -26
  201. data/stdlib/uri/0/ws.rbs +6 -3
  202. data/stdlib/uri/0/wss.rbs +5 -3
  203. data/stdlib/yaml/0/dbm.rbs +151 -87
  204. data/stdlib/yaml/0/store.rbs +6 -0
  205. data/stdlib/zlib/0/zlib.rbs +90 -31
  206. metadata +18 -6
  207. data/lib/rbs/location.rb +0 -221
  208. data/sig/char_scanner.rbs +0 -9
@@ -1,3 +1,4 @@
1
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
1
2
  # BigDecimal provides arbitrary-precision floating point decimal arithmetic.
2
3
  #
3
4
  # ## Introduction
@@ -40,6 +41,19 @@
40
41
  #
41
42
  # (1.2 - 1.0) == 0.2 #=> false
42
43
  #
44
+ # ## A Note About Precision
45
+ #
46
+ # For a calculation using a BigDecimal and another `value`, the precision of the
47
+ # result depends on the type of `value`:
48
+ #
49
+ # * If `value` is a Float, the precision is Float::DIG + 1.
50
+ # * If `value` is a Rational, the precision is larger than Float::DIG + 1.
51
+ # * If `value` is a BigDecimal, the precision is `value`'s precision in the
52
+ # internal representation, which is platform-dependent.
53
+ # * If `value` is other object, the precision is determined by the result of
54
+ # +BigDecimal(value)+.
55
+ #
56
+ #
43
57
  # ## Special features of accurate decimal arithmetic
44
58
  #
45
59
  # Because BigDecimal is more accurate than normal binary floating point
@@ -121,17 +135,36 @@
121
135
  # many other contributors.
122
136
  #
123
137
  class BigDecimal < Numeric
138
+ # <!--
139
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
140
+ # - _load(p1)
141
+ # -->
124
142
  # Internal method used to provide marshalling support. See the Marshal module.
125
143
  #
126
144
  def self._load: (String) -> BigDecimal
127
145
 
128
- # The BigDecimal.double_fig class method returns the number of digits a Float
129
- # number is allowed to have. The result depends upon the CPU and OS in use.
146
+ # <!--
147
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
148
+ # - BigDecimal.double_fig -> integer
149
+ # -->
150
+ # Returns the number of digits a Float object is allowed to have; the result is
151
+ # system-dependent:
152
+ #
153
+ # BigDecimal.double_fig # => 16
130
154
  #
131
155
  def self.double_fig: () -> Integer
132
156
 
157
+ # <!--
158
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
159
+ # - interpret_loosely(p1)
160
+ # -->
161
+ #
133
162
  def self.interpret_loosely: (string) -> BigDecimal
134
163
 
164
+ # <!--
165
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
166
+ # - BigDecimal.limit(digits)
167
+ # -->
135
168
  # Limit the number of significant digits in newly created BigDecimal numbers to
136
169
  # the specified value. Rounding is performed as necessary, as specified by
137
170
  # BigDecimal.mode.
@@ -143,55 +176,172 @@ class BigDecimal < Numeric
143
176
  #
144
177
  def self.limit: (?Integer? digits) -> Integer
145
178
 
146
- # Controls handling of arithmetic exceptions and rounding. If no value is
147
- # supplied, the current value is returned.
148
- #
149
- # Six values of the mode parameter control the handling of arithmetic
150
- # exceptions:
151
- #
152
- # BigDecimal::EXCEPTION_NaN BigDecimal::EXCEPTION_INFINITY
153
- # BigDecimal::EXCEPTION_UNDERFLOW BigDecimal::EXCEPTION_OVERFLOW
154
- # BigDecimal::EXCEPTION_ZERODIVIDE BigDecimal::EXCEPTION_ALL
155
- #
156
- # For each mode parameter above, if the value set is false, computation
157
- # continues after an arithmetic exception of the appropriate type. When
158
- # computation continues, results are as follows:
159
- #
160
- # EXCEPTION_NaN
161
- # : NaN
162
- # EXCEPTION_INFINITY
163
- # : +Infinity or -Infinity
164
- # EXCEPTION_UNDERFLOW
165
- # : 0
166
- # EXCEPTION_OVERFLOW
167
- # : +Infinity or -Infinity
168
- # EXCEPTION_ZERODIVIDE
169
- # : +Infinity or -Infinity
170
- #
171
- #
172
- # One value of the mode parameter controls the rounding of numeric values:
173
- # BigDecimal::ROUND_MODE. The values it can take are:
174
- #
175
- # ROUND_UP, :up
176
- # : round away from zero
177
- # ROUND_DOWN, :down, :truncate
178
- # : round towards zero (truncate)
179
- # ROUND_HALF_UP, :half_up, :default
180
- # : round towards the nearest neighbor, unless both neighbors are equidistant,
181
- # in which case round away from zero. (default)
182
- # ROUND_HALF_DOWN, :half_down
183
- # : round towards the nearest neighbor, unless both neighbors are equidistant,
184
- # in which case round towards zero.
185
- # ROUND_HALF_EVEN, :half_even, :banker
186
- # : round towards the nearest neighbor, unless both neighbors are equidistant,
187
- # in which case round towards the even neighbor (Banker's rounding)
188
- # ROUND_CEILING, :ceiling, :ceil
189
- # : round towards positive infinity (ceil)
190
- # ROUND_FLOOR, :floor
191
- # : round towards negative infinity (floor)
179
+ # <!--
180
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
181
+ # - BigDecimal.mode(mode, setting = nil) -> integer
182
+ # -->
183
+ # Returns an integer representing the mode settings for exception handling and
184
+ # rounding.
185
+ #
186
+ # These modes control exception handling:
187
+ #
188
+ # * BigDecimal::EXCEPTION_NaN.
189
+ # * BigDecimal::EXCEPTION_INFINITY.
190
+ # * BigDecimal::EXCEPTION_UNDERFLOW.
191
+ # * BigDecimal::EXCEPTION_OVERFLOW.
192
+ # * BigDecimal::EXCEPTION_ZERODIVIDE.
193
+ # * BigDecimal::EXCEPTION_ALL.
194
+ #
195
+ #
196
+ # Values for `setting` for exception handling:
197
+ #
198
+ # * `true`: sets the given `mode` to `true`.
199
+ # * `false`: sets the given `mode` to `false`.
200
+ # * `nil`: does not modify the mode settings.
201
+ #
202
+ #
203
+ # You can use method BigDecimal.save_exception_mode to temporarily change, and
204
+ # then automatically restore, exception modes.
205
+ #
206
+ # For clarity, some examples below begin by setting all exception modes to
207
+ # `false`.
208
+ #
209
+ # This mode controls the way rounding is to be performed:
210
+ #
211
+ # * BigDecimal::ROUND_MODE
212
+ #
213
+ #
214
+ # You can use method BigDecimal.save_rounding_mode to temporarily change, and
215
+ # then automatically restore, the rounding mode.
216
+ #
217
+ # **NaNs**
218
+ #
219
+ # Mode BigDecimal::EXCEPTION_NaN controls behavior when a BigDecimal NaN is
220
+ # created.
221
+ #
222
+ # Settings:
223
+ #
224
+ # * `false` (default): Returns `BigDecimal('NaN')`.
225
+ # * `true`: Raises FloatDomainError.
226
+ #
227
+ #
228
+ # Examples:
229
+ #
230
+ # BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
231
+ # BigDecimal('NaN') # => NaN
232
+ # BigDecimal.mode(BigDecimal::EXCEPTION_NaN, true) # => 2
233
+ # BigDecimal('NaN') # Raises FloatDomainError
234
+ #
235
+ # **Infinities**
236
+ #
237
+ # Mode BigDecimal::EXCEPTION_INFINITY controls behavior when a BigDecimal
238
+ # Infinity or -Infinity is created. Settings:
239
+ #
240
+ # * `false` (default): Returns `BigDecimal('Infinity')` or
241
+ # `BigDecimal('-Infinity')`.
242
+ # * `true`: Raises FloatDomainError.
243
+ #
244
+ #
245
+ # Examples:
246
+ #
247
+ # BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
248
+ # BigDecimal('Infinity') # => Infinity
249
+ # BigDecimal('-Infinity') # => -Infinity
250
+ # BigDecimal.mode(BigDecimal::EXCEPTION_INFINITY, true) # => 1
251
+ # BigDecimal('Infinity') # Raises FloatDomainError
252
+ # BigDecimal('-Infinity') # Raises FloatDomainError
253
+ #
254
+ # **Underflow**
255
+ #
256
+ # Mode BigDecimal::EXCEPTION_UNDERFLOW controls behavior when a BigDecimal
257
+ # underflow occurs. Settings:
258
+ #
259
+ # * `false` (default): Returns `BigDecimal('0')` or `BigDecimal('-Infinity')`.
260
+ # * `true`: Raises FloatDomainError.
261
+ #
262
+ #
263
+ # Examples:
264
+ #
265
+ # BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
266
+ # def flow_under
267
+ # x = BigDecimal('0.1')
268
+ # 100.times { x *= x }
269
+ # end
270
+ # flow_under # => 100
271
+ # BigDecimal.mode(BigDecimal::EXCEPTION_UNDERFLOW, true) # => 4
272
+ # flow_under # Raises FloatDomainError
273
+ #
274
+ # **Overflow**
275
+ #
276
+ # Mode BigDecimal::EXCEPTION_OVERFLOW controls behavior when a BigDecimal
277
+ # overflow occurs. Settings:
278
+ #
279
+ # * `false` (default): Returns `BigDecimal('Infinity')` or
280
+ # `BigDecimal('-Infinity')`.
281
+ # * `true`: Raises FloatDomainError.
282
+ #
283
+ #
284
+ # Examples:
285
+ #
286
+ # BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
287
+ # def flow_over
288
+ # x = BigDecimal('10')
289
+ # 100.times { x *= x }
290
+ # end
291
+ # flow_over # => 100
292
+ # BigDecimal.mode(BigDecimal::EXCEPTION_OVERFLOW, true) # => 1
293
+ # flow_over # Raises FloatDomainError
294
+ #
295
+ # **Zero Division**
296
+ #
297
+ # Mode BigDecimal::EXCEPTION_ZERODIVIDE controls behavior when a zero-division
298
+ # occurs. Settings:
299
+ #
300
+ # * `false` (default): Returns `BigDecimal('Infinity')` or
301
+ # `BigDecimal('-Infinity')`.
302
+ # * `true`: Raises FloatDomainError.
303
+ #
304
+ #
305
+ # Examples:
306
+ #
307
+ # BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
308
+ # one = BigDecimal('1')
309
+ # zero = BigDecimal('0')
310
+ # one / zero # => Infinity
311
+ # BigDecimal.mode(BigDecimal::EXCEPTION_ZERODIVIDE, true) # => 16
312
+ # one / zero # Raises FloatDomainError
313
+ #
314
+ # **All Exceptions**
315
+ #
316
+ # Mode BigDecimal::EXCEPTION_ALL controls all of the above:
317
+ #
318
+ # BigDecimal.mode(BigDecimal::EXCEPTION_ALL, false) # => 0
319
+ # BigDecimal.mode(BigDecimal::EXCEPTION_ALL, true) # => 23
320
+ #
321
+ # **Rounding**
322
+ #
323
+ # Mode BigDecimal::ROUND_MODE controls the way rounding is to be performed; its
324
+ # `setting` values are:
325
+ #
326
+ # * `ROUND_UP`: Round away from zero. Aliased as `:up`.
327
+ # * `ROUND_DOWN`: Round toward zero. Aliased as `:down` and `:truncate`.
328
+ # * `ROUND_HALF_UP`: Round toward the nearest neighbor; if the neighbors are
329
+ # equidistant, round away from zero. Aliased as `:half_up` and `:default`.
330
+ # * `ROUND_HALF_DOWN`: Round toward the nearest neighbor; if the neighbors are
331
+ # equidistant, round toward zero. Aliased as `:half_down`.
332
+ # * `ROUND_HALF_EVEN` (Banker's rounding): Round toward the nearest neighbor;
333
+ # if the neighbors are equidistant, round toward the even neighbor. Aliased
334
+ # as `:half_even` and `:banker`.
335
+ # * `ROUND_CEILING`: Round toward positive infinity. Aliased as `:ceiling` and
336
+ # `:ceil`.
337
+ # * `ROUND_FLOOR`: Round toward negative infinity. Aliased as `:floor:`.
192
338
  #
193
339
  def self.mode: (Integer mode, ?Integer? value) -> Integer?
194
340
 
341
+ # <!--
342
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
343
+ # - BigDecimal.save_exception_mode { ... }
344
+ # -->
195
345
  # Execute the provided block, but preserve the exception mode
196
346
  #
197
347
  # BigDecimal.save_exception_mode do
@@ -209,6 +359,10 @@ class BigDecimal < Numeric
209
359
  #
210
360
  def self.save_exception_mode: () { (?nil) -> void } -> void
211
361
 
362
+ # <!--
363
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
364
+ # - BigDecimal.save_limit { ... }
365
+ # -->
212
366
  # Execute the provided block, but preserve the precision limit
213
367
  #
214
368
  # BigDecimal.limit(100)
@@ -221,6 +375,10 @@ class BigDecimal < Numeric
221
375
  #
222
376
  def self.save_limit: () { (?nil) -> void } -> void
223
377
 
378
+ # <!--
379
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
380
+ # - BigDecimal.save_rounding_mode { ... }
381
+ # -->
224
382
  # Execute the provided block, but preserve the rounding mode
225
383
  #
226
384
  # BigDecimal.save_rounding_mode do
@@ -236,93 +394,154 @@ class BigDecimal < Numeric
236
394
 
237
395
  public
238
396
 
397
+ # <!--
398
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
399
+ # - a % b
400
+ # - a.modulo(b)
401
+ # -->
239
402
  # Returns the modulus from dividing by b.
240
403
  #
241
404
  # See BigDecimal#divmod.
242
405
  #
243
406
  def %: (Numeric) -> BigDecimal
244
407
 
245
- # Multiply by the specified value.
246
- #
247
- # e.g.
248
- # c = a.mult(b,n)
249
- # c = a * b
250
- #
251
- # digits
252
- # : If specified and less than the number of significant digits of the result,
253
- # the result is rounded to that number of digits, according to
254
- # BigDecimal.mode.
408
+ # <!--
409
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
410
+ # - *(p1)
411
+ # -->
255
412
  #
256
413
  def *: (Numeric) -> BigDecimal
257
414
 
258
- # Returns the value raised to the power of n.
415
+ # <!--
416
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
417
+ # - self ** other -> bigdecimal
418
+ # -->
419
+ # Returns the BigDecimal value of `self` raised to power `other`:
420
+ #
421
+ # b = BigDecimal('3.14')
422
+ # b ** 2 # => 0.98596e1
423
+ # b ** 2.0 # => 0.98596e1
424
+ # b ** Rational(2, 1) # => 0.98596e1
259
425
  #
260
- # See BigDecimal#power.
426
+ # Related: BigDecimal#power.
261
427
  #
262
428
  def **: (Numeric) -> BigDecimal
263
429
 
264
- # Add the specified value.
430
+ # <!--
431
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
432
+ # - self + value -> bigdecimal
433
+ # -->
434
+ # Returns the BigDecimal sum of `self` and `value`:
265
435
  #
266
- # e.g.
267
- # c = a.add(b,n)
268
- # c = a + b
436
+ # b = BigDecimal('111111.111') # => 0.111111111e6
437
+ # b + 2 # => 0.111113111e6
438
+ # b + 2.0 # => 0.111113111e6
439
+ # b + Rational(2, 1) # => 0.111113111e6
440
+ # b + Complex(2, 0) # => (0.111113111e6+0i)
269
441
  #
270
- # digits
271
- # : If specified and less than the number of significant digits of the result,
272
- # the result is rounded to that number of digits, according to
273
- # BigDecimal.mode.
442
+ # See the [Note About
443
+ # Precision](BigDecimal.html#class-BigDecimal-label-A+Note+About+Precision).
274
444
  #
275
445
  def +: (Numeric) -> BigDecimal
276
446
 
277
- # Return self.
447
+ # <!--
448
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
449
+ # - +big_decimal -> self
450
+ # -->
451
+ # Returns `self`:
278
452
  #
279
- # +BigDecimal('5') #=> 0.5e1
453
+ # +BigDecimal(5) # => 0.5e1
454
+ # +BigDecimal(-5) # => -0.5e1
280
455
  #
281
456
  def +@: () -> BigDecimal
282
457
 
283
- # Subtract the specified value.
284
- #
285
- # e.g.
286
- # c = a - b
458
+ # <!--
459
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
460
+ # - self - value -> bigdecimal
461
+ # -->
462
+ # Returns the BigDecimal difference of `self` and `value`:
287
463
  #
288
- # The precision of the result value depends on the type of `b`.
464
+ # b = BigDecimal('333333.333') # => 0.333333333e6
465
+ # b - 2 # => 0.333331333e6
466
+ # b - 2.0 # => 0.333331333e6
467
+ # b - Rational(2, 1) # => 0.333331333e6
468
+ # b - Complex(2, 0) # => (0.333331333e6+0i)
289
469
  #
290
- # If `b` is a Float, the precision of the result is Float::DIG+1.
291
- #
292
- # If `b` is a BigDecimal, the precision of the result is `b`'s precision of
293
- # internal representation from platform. So, it's return value is platform
294
- # dependent.
470
+ # See the [Note About
471
+ # Precision](BigDecimal.html#class-BigDecimal-label-A+Note+About+Precision).
295
472
  #
296
473
  def -: (Numeric) -> BigDecimal
297
474
 
298
- # Return the negation of self.
475
+ # <!--
476
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
477
+ # - -self -> bigdecimal
478
+ # -->
479
+ # Returns the BigDecimal negation of self:
299
480
  #
300
- # -BigDecimal('5') #=> -0.5e1
481
+ # b0 = BigDecimal('1.5')
482
+ # b1 = -b0 # => -0.15e1
483
+ # b2 = -b1 # => 0.15e1
301
484
  #
302
485
  def -@: () -> BigDecimal
303
486
 
487
+ # <!--
488
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
489
+ # - a / b -> bigdecimal
490
+ # -->
304
491
  # Divide by the specified value.
305
492
  #
306
- # See BigDecimal#div.
493
+ # The result precision will be the precision of the larger operand, but its
494
+ # minimum is 2*Float::DIG.
495
+ #
496
+ # See BigDecimal#div. See BigDecimal#quo.
307
497
  #
308
498
  def /: (Numeric) -> BigDecimal
309
499
 
310
- # Returns true if a is less than b.
500
+ # <!--
501
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
502
+ # - self < other -> true or false
503
+ # -->
504
+ # Returns `true` if `self` is less than `other`, `false` otherwise:
311
505
  #
312
- # Values may be coerced to perform the comparison (see ==, BigDecimal#coerce).
506
+ # b = BigDecimal('1.5') # => 0.15e1
507
+ # b < 2 # => true
508
+ # b < 2.0 # => true
509
+ # b < Rational(2, 1) # => true
510
+ # b < 1.5 # => false
511
+ #
512
+ # Raises an exception if the comparison cannot be made.
313
513
  #
314
514
  def <: (Numeric) -> bool
315
515
 
316
- # Returns true if a is less than or equal to b.
516
+ # <!--
517
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
518
+ # - self <= other -> true or false
519
+ # -->
520
+ # Returns `true` if `self` is less or equal to than `other`, `false` otherwise:
521
+ #
522
+ # b = BigDecimal('1.5') # => 0.15e1
523
+ # b <= 2 # => true
524
+ # b <= 2.0 # => true
525
+ # b <= Rational(2, 1) # => true
526
+ # b <= 1.5 # => true
527
+ # b < 1 # => false
317
528
  #
318
- # Values may be coerced to perform the comparison (see ==, BigDecimal#coerce).
529
+ # Raises an exception if the comparison cannot be made.
319
530
  #
320
531
  def <=: (Numeric) -> bool
321
532
 
533
+ # <!--
534
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
535
+ # - <=>(p1)
536
+ # -->
322
537
  # The comparison operator. a <=> b is 0 if a == b, 1 if a > b, -1 if a < b.
323
538
  #
324
539
  def <=>: (untyped) -> Integer?
325
540
 
541
+ # <!--
542
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
543
+ # - ==(p1)
544
+ # -->
326
545
  # Tests for value equality; returns true if the values are equal.
327
546
  #
328
547
  # The == and === operators and the eql? method have the same implementation for
@@ -334,6 +553,7 @@ class BigDecimal < Numeric
334
553
  #
335
554
  def ==: (untyped) -> bool
336
555
 
556
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
337
557
  # Tests for value equality; returns true if the values are equal.
338
558
  #
339
559
  # The == and === operators and the eql? method have the same implementation for
@@ -345,49 +565,92 @@ class BigDecimal < Numeric
345
565
  #
346
566
  def ===: (untyped) -> bool
347
567
 
348
- # Returns true if a is greater than b.
568
+ # <!--
569
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
570
+ # - self > other -> true or false
571
+ # -->
572
+ # Returns `true` if `self` is greater than `other`, `false` otherwise:
349
573
  #
350
- # Values may be coerced to perform the comparison (see ==, BigDecimal#coerce).
574
+ # b = BigDecimal('1.5')
575
+ # b > 1 # => true
576
+ # b > 1.0 # => true
577
+ # b > Rational(1, 1) # => true
578
+ # b > 2 # => false
579
+ #
580
+ # Raises an exception if the comparison cannot be made.
351
581
  #
352
582
  def >: (Numeric) -> bool
353
583
 
354
- # Returns true if a is greater than or equal to b.
584
+ # <!--
585
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
586
+ # - self >= other -> true or false
587
+ # -->
588
+ # Returns `true` if `self` is greater than or equal to `other`, `false`
589
+ # otherwise:
590
+ #
591
+ # b = BigDecimal('1.5')
592
+ # b >= 1 # => true
593
+ # b >= 1.0 # => true
594
+ # b >= Rational(1, 1) # => true
595
+ # b >= 1.5 # => true
596
+ # b > 2 # => false
355
597
  #
356
- # Values may be coerced to perform the comparison (see ==, BigDecimal#coerce)
598
+ # Raises an exception if the comparison cannot be made.
357
599
  #
358
600
  def >=: (Numeric) -> bool
359
601
 
360
- # Method used to provide marshalling support.
361
- #
362
- # inf = BigDecimal('Infinity')
363
- # #=> Infinity
364
- # BigDecimal._load(inf._dump)
365
- # #=> Infinity
602
+ # <!--
603
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
604
+ # - _dump -> string
605
+ # -->
606
+ # Returns a string representing the marshalling of `self`. See module Marshal.
366
607
  #
367
- # See the Marshal module.
608
+ # inf = BigDecimal('Infinity') # => Infinity
609
+ # dumped = inf._dump # => "9:Infinity"
610
+ # BigDecimal._load(dumped) # => Infinity
368
611
  #
369
612
  def _dump: (?untyped) -> String
370
613
 
371
- # Returns the absolute value, as a BigDecimal.
614
+ # <!--
615
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
616
+ # - abs -> bigdecimal
617
+ # -->
618
+ # Returns the BigDecimal absolute value of `self`:
372
619
  #
373
- # BigDecimal('5').abs #=> 0.5e1
374
- # BigDecimal('-3').abs #=> 0.3e1
620
+ # BigDecimal('5').abs # => 0.5e1
621
+ # BigDecimal('-3').abs # => 0.3e1
375
622
  #
376
623
  def abs: () -> BigDecimal
377
624
 
378
- # Add the specified value.
625
+ # <!--
626
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
627
+ # - add(value, ndigits) -> new_bigdecimal
628
+ # -->
629
+ # Returns the BigDecimal sum of `self` and `value` with a precision of `ndigits`
630
+ # decimal digits.
379
631
  #
380
- # e.g.
381
- # c = a.add(b,n)
382
- # c = a + b
632
+ # When `ndigits` is less than the number of significant digits in the sum, the
633
+ # sum is rounded to that number of digits, according to the current rounding
634
+ # mode; see BigDecimal.mode.
383
635
  #
384
- # digits
385
- # : If specified and less than the number of significant digits of the result,
386
- # the result is rounded to that number of digits, according to
387
- # BigDecimal.mode.
636
+ # Examples:
637
+ #
638
+ # # Set the rounding mode.
639
+ # BigDecimal.mode(BigDecimal::ROUND_MODE, :half_up)
640
+ # b = BigDecimal('111111.111')
641
+ # b.add(1, 0) # => 0.111112111e6
642
+ # b.add(1, 3) # => 0.111e6
643
+ # b.add(1, 6) # => 0.111112e6
644
+ # b.add(1, 15) # => 0.111112111e6
645
+ # b.add(1.0, 15) # => 0.111112111e6
646
+ # b.add(Rational(1, 1), 15) # => 0.111112111e6
388
647
  #
389
648
  def add: (Numeric value, Integer digits) -> BigDecimal
390
649
 
650
+ # <!--
651
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
652
+ # - ceil(n)
653
+ # -->
391
654
  # Return the smallest integer greater than or equal to the value, as a
392
655
  # BigDecimal.
393
656
  #
@@ -406,8 +669,17 @@ class BigDecimal < Numeric
406
669
  def ceil: () -> Integer
407
670
  | (int n) -> BigDecimal
408
671
 
672
+ # <!--
673
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
674
+ # - clone()
675
+ # -->
676
+ #
409
677
  def clone: () -> self
410
678
 
679
+ # <!--
680
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
681
+ # - coerce(p1)
682
+ # -->
411
683
  # The coerce method provides support for Ruby type coercion. It is not enabled
412
684
  # by default.
413
685
  #
@@ -422,8 +694,13 @@ class BigDecimal < Numeric
422
694
  # Note that coercing a String to a BigDecimal is not supported by default; it
423
695
  # requires a special compile-time option when building Ruby.
424
696
  #
425
- def coerce: (Numeric) -> [BigDecimal, BigDecimal]
697
+ def coerce: (Numeric) -> [ BigDecimal, BigDecimal ]
426
698
 
699
+ # <!--
700
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
701
+ # - div(value) -> integer
702
+ # - div(value, digits) -> bigdecimal or integer
703
+ # -->
427
704
  # Divide by the specified value.
428
705
  #
429
706
  # digits
@@ -437,6 +714,8 @@ class BigDecimal < Numeric
437
714
  # Float#div; see also BigDecimal#divmod.
438
715
  #
439
716
  #
717
+ # See BigDecimal#/. See BigDecimal#quo.
718
+ #
440
719
  # Examples:
441
720
  #
442
721
  # a = BigDecimal("4")
@@ -453,6 +732,10 @@ class BigDecimal < Numeric
453
732
  def div: (Numeric value) -> Integer
454
733
  | (Numeric value, int digits) -> BigDecimal
455
734
 
735
+ # <!--
736
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
737
+ # - divmod(value)
738
+ # -->
456
739
  # Divides by the specified value, and returns the quotient and modulus as
457
740
  # BigDecimal numbers. The quotient is rounded towards negative infinity.
458
741
  #
@@ -472,10 +755,16 @@ class BigDecimal < Numeric
472
755
  # The quotient q is (a/b).floor, and the modulus is the amount that must be
473
756
  # added to q * b to get a.
474
757
  #
475
- def divmod: (Numeric) -> [BigDecimal, BigDecimal]
758
+ def divmod: (Numeric) -> [ BigDecimal, BigDecimal ]
476
759
 
760
+ # <!--
761
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
762
+ # - dup()
763
+ # -->
764
+ #
477
765
  def dup: () -> self
478
766
 
767
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
479
768
  # Tests for value equality; returns true if the values are equal.
480
769
  #
481
770
  # The == and === operators and the eql? method have the same implementation for
@@ -487,6 +776,10 @@ class BigDecimal < Numeric
487
776
  #
488
777
  def eql?: (untyped) -> bool
489
778
 
779
+ # <!--
780
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
781
+ # - exponent()
782
+ # -->
490
783
  # Returns the exponent of the BigDecimal number, as an Integer.
491
784
  #
492
785
  # If the number can be represented as 0.xxxxxx*10**n where xxxxxx is a string of
@@ -494,14 +787,26 @@ class BigDecimal < Numeric
494
787
  #
495
788
  def exponent: () -> Integer
496
789
 
790
+ # <!--
791
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
792
+ # - finite?()
793
+ # -->
497
794
  # Returns True if the value is finite (not NaN or infinite).
498
795
  #
499
796
  def finite?: () -> bool
500
797
 
798
+ # <!--
799
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
800
+ # - fix()
801
+ # -->
501
802
  # Return the integer part of the number, as a BigDecimal.
502
803
  #
503
804
  def fix: () -> BigDecimal
504
805
 
806
+ # <!--
807
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
808
+ # - floor(n)
809
+ # -->
505
810
  # Return the largest integer less than or equal to the value, as a BigDecimal.
506
811
  #
507
812
  # BigDecimal('3.14159').floor #=> 3
@@ -519,22 +824,42 @@ class BigDecimal < Numeric
519
824
  def floor: () -> Integer
520
825
  | (int n) -> BigDecimal
521
826
 
827
+ # <!--
828
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
829
+ # - frac()
830
+ # -->
522
831
  # Return the fractional part of the number, as a BigDecimal.
523
832
  #
524
833
  def frac: () -> BigDecimal
525
834
 
526
- # Creates a hash for this BigDecimal.
835
+ # <!--
836
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
837
+ # - hash -> integer
838
+ # -->
839
+ # Returns the integer hash value for `self`.
840
+ #
841
+ # Two instances of BigDecimal have the same hash value if and only if they have
842
+ # equal:
527
843
  #
528
- # Two BigDecimals with equal sign, fractional part and exponent have the same
529
- # hash.
844
+ # * Sign.
845
+ # * Fractional part.
846
+ # * Exponent.
530
847
  #
531
848
  def hash: () -> Integer
532
849
 
850
+ # <!--
851
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
852
+ # - infinite?()
853
+ # -->
533
854
  # Returns nil, -1, or +1 depending on whether the value is finite, -Infinity, or
534
855
  # +Infinity.
535
856
  #
536
857
  def infinite?: () -> Integer?
537
858
 
859
+ # <!--
860
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
861
+ # - inspect()
862
+ # -->
538
863
  # Returns a string representation of self.
539
864
  #
540
865
  # BigDecimal("1234.5678").inspect
@@ -542,33 +867,60 @@ class BigDecimal < Numeric
542
867
  #
543
868
  def inspect: () -> String
544
869
 
870
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
545
871
  # Returns the modulus from dividing by b.
546
872
  #
547
873
  # See BigDecimal#divmod.
548
874
  #
549
875
  def modulo: (Numeric b) -> BigDecimal
550
876
 
551
- # Multiply by the specified value.
877
+ # <!--
878
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
879
+ # - mult(other, ndigits) -> bigdecimal
880
+ # -->
881
+ # Returns the BigDecimal product of `self` and `value` with a precision of
882
+ # `ndigits` decimal digits.
552
883
  #
553
- # e.g.
554
- # c = a.mult(b,n)
555
- # c = a * b
884
+ # When `ndigits` is less than the number of significant digits in the sum, the
885
+ # sum is rounded to that number of digits, according to the current rounding
886
+ # mode; see BigDecimal.mode.
556
887
  #
557
- # digits
558
- # : If specified and less than the number of significant digits of the result,
559
- # the result is rounded to that number of digits, according to
560
- # BigDecimal.mode.
888
+ # Examples:
889
+ #
890
+ # # Set the rounding mode.
891
+ # BigDecimal.mode(BigDecimal::ROUND_MODE, :half_up)
892
+ # b = BigDecimal('555555.555')
893
+ # b.mult(3, 0) # => 0.1666666665e7
894
+ # b.mult(3, 3) # => 0.167e7
895
+ # b.mult(3, 6) # => 0.166667e7
896
+ # b.mult(3, 15) # => 0.1666666665e7
897
+ # b.mult(3.0, 0) # => 0.1666666665e7
898
+ # b.mult(Rational(3, 1), 0) # => 0.1666666665e7
899
+ # b.mult(Complex(3, 0), 0) # => (0.1666666665e7+0.0i)
561
900
  #
562
901
  def mult: (Numeric value, int digits) -> BigDecimal
563
902
 
903
+ # <!--
904
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
905
+ # - nan?()
906
+ # -->
564
907
  # Returns True if the value is Not a Number.
565
908
  #
566
909
  def nan?: () -> bool
567
910
 
911
+ # <!--
912
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
913
+ # - nonzero?()
914
+ # -->
568
915
  # Returns self if the value is non-zero, nil otherwise.
569
916
  #
570
917
  def nonzero?: () -> self?
571
918
 
919
+ # <!--
920
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
921
+ # - power(n)
922
+ # - power(n, prec)
923
+ # -->
572
924
  # Returns the value raised to the power of n.
573
925
  #
574
926
  # Note that n must be an Integer.
@@ -577,28 +929,53 @@ class BigDecimal < Numeric
577
929
  #
578
930
  def power: (Numeric n, int prec) -> BigDecimal
579
931
 
580
- # Returns an Array of two Integer values.
932
+ # <!--
933
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
934
+ # - precs -> array
935
+ # -->
936
+ # Returns an Array of two Integer values that represent platform-dependent
937
+ # internal storage properties.
938
+ #
939
+ # This method is deprecated and will be removed in the future. Instead, use
940
+ # BigDecimal#n_significant_digits for obtaining the number of significant digits
941
+ # in scientific notation, and BigDecimal#precision for obtaining the number of
942
+ # digits in decimal notation.
943
+ #
944
+ def precs: () -> [ Integer, Integer ]
945
+
946
+ # <!--
947
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
948
+ # - quo(value) -> bigdecimal
949
+ # - quo(value, digits) -> bigdecimal
950
+ # -->
951
+ # Divide by the specified value.
581
952
  #
582
- # The first value is the current number of significant digits in the BigDecimal.
583
- # The second value is the maximum number of significant digits for the
584
- # BigDecimal.
953
+ # digits
954
+ # : If specified and less than the number of significant digits of the result,
955
+ # the result is rounded to the given number of digits, according to the
956
+ # rounding mode indicated by BigDecimal.mode.
585
957
  #
586
- # BigDecimal('5').precs #=> [9, 18]
958
+ # If digits is 0 or omitted, the result is the same as for the / operator.
587
959
  #
588
- def precs: () -> [Integer, Integer]
589
-
590
- # Divide by the specified value.
591
960
  #
592
- # See BigDecimal#div.
961
+ # See BigDecimal#/. See BigDecimal#div.
593
962
  #
594
963
  def quo: (Numeric) -> BigDecimal
595
964
 
965
+ # <!--
966
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
967
+ # - remainder(value)
968
+ # -->
596
969
  # Returns the remainder from dividing by the value.
597
970
  #
598
971
  # x.remainder(y) means x-y*(x/y).truncate
599
972
  #
600
973
  def remainder: (Numeric) -> BigDecimal
601
974
 
975
+ # <!--
976
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
977
+ # - round(n, mode)
978
+ # -->
602
979
  # Round to the nearest integer (by default), returning the result as a
603
980
  # BigDecimal if n is specified, or as an Integer if it isn't.
604
981
  #
@@ -613,10 +990,10 @@ class BigDecimal < Numeric
613
990
  # than that many digits.
614
991
  #
615
992
  # If n is specified and negative, at least that many digits to the left of the
616
- # decimal point will be 0 in the result.
993
+ # decimal point will be 0 in the result, and return value will be an Integer.
617
994
  #
618
995
  # BigDecimal('3.14159').round(3) #=> 3.142
619
- # BigDecimal('13345.234').round(-2) #=> 13300.0
996
+ # BigDecimal('13345.234').round(-2) #=> 13300
620
997
  #
621
998
  # The value of the optional mode argument can be used to determine how rounding
622
999
  # is performed; see BigDecimal.mode.
@@ -624,6 +1001,10 @@ class BigDecimal < Numeric
624
1001
  def round: () -> Integer
625
1002
  | (Numeric n, ?Integer mode) -> BigDecimal
626
1003
 
1004
+ # <!--
1005
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1006
+ # - sign()
1007
+ # -->
627
1008
  # Returns the sign of the value.
628
1009
  #
629
1010
  # Returns a positive value if > 0, a negative value if < 0, and a zero if == 0.
@@ -648,6 +1029,10 @@ class BigDecimal < Numeric
648
1029
  #
649
1030
  def sign: () -> Integer
650
1031
 
1032
+ # <!--
1033
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1034
+ # - split()
1035
+ # -->
651
1036
  # Splits a BigDecimal number into four parts, returned as an array of values.
652
1037
  #
653
1038
  # The first value represents the sign of the BigDecimal, and is -1 or 1, or 0 if
@@ -672,14 +1057,22 @@ class BigDecimal < Numeric
672
1057
  # (Note that the to_f method is provided as a more convenient way to translate a
673
1058
  # BigDecimal to a Float.)
674
1059
  #
675
- def split: () -> [Integer, String, Integer, Integer]
1060
+ def split: () -> [ Integer, String, Integer, Integer ]
676
1061
 
1062
+ # <!--
1063
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1064
+ # - sqrt(n)
1065
+ # -->
677
1066
  # Returns the square root of the value.
678
1067
  #
679
1068
  # Result has at least n significant digits.
680
1069
  #
681
1070
  def sqrt: (int n) -> BigDecimal
682
1071
 
1072
+ # <!--
1073
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1074
+ # - sub(value, digits) -> bigdecimal
1075
+ # -->
683
1076
  # Subtract the specified value.
684
1077
  #
685
1078
  # e.g.
@@ -692,28 +1085,45 @@ class BigDecimal < Numeric
692
1085
  #
693
1086
  def sub: (Numeric value, int digits) -> BigDecimal
694
1087
 
1088
+ # <!--
1089
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1090
+ # - to_f()
1091
+ # -->
695
1092
  # Returns a new Float object having approximately the same value as the
696
1093
  # BigDecimal number. Normal accuracy limits and built-in errors of binary Float
697
1094
  # arithmetic apply.
698
1095
  #
699
1096
  def to_f: () -> Float
700
1097
 
1098
+ # <!--
1099
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1100
+ # - to_i()
1101
+ # -->
701
1102
  # Returns the value as an Integer.
702
1103
  #
703
1104
  # If the BigDecimal is infinity or NaN, raises FloatDomainError.
704
1105
  #
705
1106
  def to_i: () -> Integer
706
1107
 
1108
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
707
1109
  # Returns the value as an Integer.
708
1110
  #
709
1111
  # If the BigDecimal is infinity or NaN, raises FloatDomainError.
710
1112
  #
711
1113
  def to_int: () -> Integer
712
1114
 
1115
+ # <!--
1116
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1117
+ # - to_r()
1118
+ # -->
713
1119
  # Converts a BigDecimal to a Rational.
714
1120
  #
715
1121
  def to_r: () -> Rational
716
1122
 
1123
+ # <!--
1124
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1125
+ # - to_s(s)
1126
+ # -->
717
1127
  # Converts the value to a string.
718
1128
  #
719
1129
  # The default format looks like 0.xxxxEnn.
@@ -744,8 +1154,12 @@ class BigDecimal < Numeric
744
1154
  # BigDecimal('123.45678901234567890').to_s(' F')
745
1155
  # #=> ' 123.4567890123456789'
746
1156
  #
747
- def to_s: (?(String | int) s) -> String
1157
+ def to_s: (?String | int s) -> String
748
1158
 
1159
+ # <!--
1160
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1161
+ # - truncate(n)
1162
+ # -->
749
1163
  # Truncate to the nearest integer (by default), returning the result as a
750
1164
  # BigDecimal.
751
1165
  #
@@ -765,6 +1179,10 @@ class BigDecimal < Numeric
765
1179
  def truncate: () -> Integer
766
1180
  | (int n) -> BigDecimal
767
1181
 
1182
+ # <!--
1183
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1184
+ # - zero?()
1185
+ # -->
768
1186
  # Returns True if the value is zero.
769
1187
  #
770
1188
  def zero?: () -> bool
@@ -774,6 +1192,7 @@ class BigDecimal < Numeric
774
1192
  def initialize_copy: (self) -> self
775
1193
  end
776
1194
 
1195
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
777
1196
  # Base value used in internal calculations. On a 32 bit system, BASE is 10000,
778
1197
  # indicating that calculation is done in groups of 4 digits. (If it were larger,
779
1198
  # BASE**2 wouldn't fit in 32 bits, so you couldn't guarantee that two groups
@@ -781,151 +1200,181 @@ end
781
1200
  #
782
1201
  BigDecimal::BASE: Integer
783
1202
 
1203
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
784
1204
  # Determines whether overflow, underflow or zero divide result in an exception
785
1205
  # being thrown. See BigDecimal.mode.
786
1206
  #
787
1207
  BigDecimal::EXCEPTION_ALL: Integer
788
1208
 
1209
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
789
1210
  # Determines what happens when the result of a computation is infinity. See
790
1211
  # BigDecimal.mode.
791
1212
  #
792
1213
  BigDecimal::EXCEPTION_INFINITY: Integer
793
1214
 
1215
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
794
1216
  # Determines what happens when the result of a computation is not a number
795
1217
  # (NaN). See BigDecimal.mode.
796
1218
  #
797
1219
  BigDecimal::EXCEPTION_NaN: Integer
798
1220
 
1221
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
799
1222
  # Determines what happens when the result of a computation is an overflow (a
800
1223
  # result too large to be represented). See BigDecimal.mode.
801
1224
  #
802
1225
  BigDecimal::EXCEPTION_OVERFLOW: Integer
803
1226
 
1227
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
804
1228
  # Determines what happens when the result of a computation is an underflow (a
805
1229
  # result too small to be represented). See BigDecimal.mode.
806
1230
  #
807
1231
  BigDecimal::EXCEPTION_UNDERFLOW: Integer
808
1232
 
1233
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
809
1234
  # Determines what happens when a division by zero is performed. See
810
1235
  # BigDecimal.mode.
811
1236
  #
812
1237
  BigDecimal::EXCEPTION_ZERODIVIDE: Integer
813
1238
 
814
- # Positive infinity value.
1239
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
1240
+ # Special value constants
815
1241
  #
816
1242
  BigDecimal::INFINITY: BigDecimal
817
1243
 
818
- # 'Not a Number' value.
819
- #
820
1244
  BigDecimal::NAN: BigDecimal
821
1245
 
1246
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
822
1247
  # Round towards +Infinity. See BigDecimal.mode.
823
1248
  #
824
1249
  BigDecimal::ROUND_CEILING: Integer
825
1250
 
1251
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
826
1252
  # Indicates that values should be rounded towards zero. See BigDecimal.mode.
827
1253
  #
828
1254
  BigDecimal::ROUND_DOWN: Integer
829
1255
 
1256
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
830
1257
  # Round towards -Infinity. See BigDecimal.mode.
831
1258
  #
832
1259
  BigDecimal::ROUND_FLOOR: Integer
833
1260
 
1261
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
834
1262
  # Indicates that digits >= 6 should be rounded up, others rounded down. See
835
1263
  # BigDecimal.mode.
836
1264
  #
837
1265
  BigDecimal::ROUND_HALF_DOWN: Integer
838
1266
 
1267
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
839
1268
  # Round towards the even neighbor. See BigDecimal.mode.
840
1269
  #
841
1270
  BigDecimal::ROUND_HALF_EVEN: Integer
842
1271
 
1272
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
843
1273
  # Indicates that digits >= 5 should be rounded up, others rounded down. See
844
1274
  # BigDecimal.mode.
845
1275
  #
846
1276
  BigDecimal::ROUND_HALF_UP: Integer
847
1277
 
1278
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
848
1279
  # Determines what happens when a result must be rounded in order to fit in the
849
1280
  # appropriate number of significant digits. See BigDecimal.mode.
850
1281
  #
851
1282
  BigDecimal::ROUND_MODE: Integer
852
1283
 
1284
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
853
1285
  # Indicates that values should be rounded away from zero. See BigDecimal.mode.
854
1286
  #
855
1287
  BigDecimal::ROUND_UP: Integer
856
1288
 
1289
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
857
1290
  # Indicates that a value is negative and finite. See BigDecimal.sign.
858
1291
  #
859
1292
  BigDecimal::SIGN_NEGATIVE_FINITE: Integer
860
1293
 
1294
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
861
1295
  # Indicates that a value is negative and infinite. See BigDecimal.sign.
862
1296
  #
863
1297
  BigDecimal::SIGN_NEGATIVE_INFINITE: Integer
864
1298
 
1299
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
865
1300
  # Indicates that a value is -0. See BigDecimal.sign.
866
1301
  #
867
1302
  BigDecimal::SIGN_NEGATIVE_ZERO: Integer
868
1303
 
1304
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
869
1305
  # Indicates that a value is not a number. See BigDecimal.sign.
870
1306
  #
871
1307
  BigDecimal::SIGN_NaN: Integer
872
1308
 
1309
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
873
1310
  # Indicates that a value is positive and finite. See BigDecimal.sign.
874
1311
  #
875
1312
  BigDecimal::SIGN_POSITIVE_FINITE: Integer
876
1313
 
1314
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
877
1315
  # Indicates that a value is positive and infinite. See BigDecimal.sign.
878
1316
  #
879
1317
  BigDecimal::SIGN_POSITIVE_INFINITE: Integer
880
1318
 
1319
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
881
1320
  # Indicates that a value is +0. See BigDecimal.sign.
882
1321
  #
883
1322
  BigDecimal::SIGN_POSITIVE_ZERO: Integer
884
1323
 
1324
+ # <!-- rdoc-file=ext/bigdecimal/bigdecimal.c -->
885
1325
  # The version of bigdecimal library
886
1326
  #
887
1327
  BigDecimal::VERSION: String
888
1328
 
1329
+ %a{annotate:rdoc:skip}
889
1330
  module Kernel
890
1331
  private
891
1332
 
892
- # Create a new BigDecimal object.
1333
+ # <!--
1334
+ # rdoc-file=ext/bigdecimal/bigdecimal.c
1335
+ # - BigDecimal(value, exception: true) -> bigdecimal
1336
+ # - BigDecimal(value, ndigits, exception: true) -> bigdecimal
1337
+ # -->
1338
+ # Returns the \BigDecimal converted from +value+
1339
+ # with a precision of +ndigits+ decimal digits.
893
1340
  #
894
- # initial
895
- # : The initial value, as an Integer, a Float, a Rational, a BigDecimal, or a
896
- # String.
1341
+ # When +ndigits+ is less than the number of significant digits
1342
+ # in the value, the result is rounded to that number of digits,
1343
+ # according to the current rounding mode; see BigDecimal.mode.
897
1344
  #
898
- # If it is a String, spaces are ignored and unrecognized characters
899
- # terminate the value.
1345
+ # Returns `value` converted to a BigDecimal, depending on the type of `value`:
900
1346
  #
901
- # digits
902
- # : The number of significant digits, as an Integer. If omitted or 0, the
903
- # number of significant digits is determined from the initial value.
1347
+ # * Integer, Float, Rational, Complex, or BigDecimal: converted directly:
1348
+ #
1349
+ # # Integer, Complex, or BigDecimal value does not require ndigits; ignored if given.
1350
+ # BigDecimal(2) # => 0.2e1
1351
+ # BigDecimal(Complex(2, 0)) # => 0.2e1
1352
+ # BigDecimal(BigDecimal(2)) # => 0.2e1
1353
+ # # Float or Rational value requires ndigits.
1354
+ # BigDecimal(2.0, 0) # => 0.2e1
1355
+ # BigDecimal(Rational(2, 1), 0) # => 0.2e1
904
1356
  #
905
- # The actual number of significant digits used in computation is usually
906
- # larger than the specified number.
1357
+ # * String: converted by parsing if it contains an integer or floating-point
1358
+ # literal; leading and trailing whitespace is ignored:
907
1359
  #
908
- # exception
909
- # : Whether an exception should be raised on invalid arguments. `true` by
910
- # default, if passed `false`, just returns `nil` for invalid.
1360
+ # # String does not require ndigits; ignored if given.
1361
+ # BigDecimal('2') # => 0.2e1
1362
+ # BigDecimal('2.0') # => 0.2e1
1363
+ # BigDecimal('0.2e1') # => 0.2e1
1364
+ # BigDecimal(' 2.0 ') # => 0.2e1
911
1365
  #
1366
+ # * Other type that responds to method `:to_str`: first converted to a string,
1367
+ # then converted to a BigDecimal, as above.
912
1368
  #
913
- # #### Exceptions
1369
+ # * Other type:
914
1370
  #
915
- # TypeError
916
- # : If the `initial` type is neither Integer, Float, Rational, nor BigDecimal,
917
- # this exception is raised.
1371
+ # * Raises an exception if keyword argument `exception` is `true`.
1372
+ # * Returns `nil` if keyword argument `exception` is `true`.
918
1373
  #
919
- # TypeError
920
- # : If the `digits` is not an Integer, this exception is raised.
921
1374
  #
922
- # ArgumentError
923
- # : If `initial` is a Float, and the `digits` is larger than Float::DIG + 1,
924
- # this exception is raised.
925
1375
  #
926
- # ArgumentError
927
- # : If the `initial` is a Float or Rational, and the `digits` value is
928
- # omitted, this exception is raised.
1376
+ # Raises an exception if `value` evaluates to a Float and `digits` is larger
1377
+ # than Float::DIG + 1.
929
1378
  #
930
- def self?.BigDecimal: ((real | string | BigDecimal) initial, ?int digits, ?exception: bool) -> BigDecimal
1379
+ def self?.BigDecimal: (real | string | BigDecimal initial, ?int digits, ?exception: bool) -> BigDecimal
931
1380
  end