@@ -21,9 +21,13 @@ def self.coerce_to_bigdecimal(x, prec, method_name) # :nodoc:
21
21
raise ArgumentError , "#{ x . inspect } can't be coerced into BigDecimal"
22
22
end
23
23
24
- def self . validate_prec ( prec , method_name ) # :nodoc:
24
+ def self . validate_prec ( prec , method_name , accept_zero : false ) # :nodoc:
25
25
raise ArgumentError , 'precision must be an Integer' unless Integer === prec
26
- raise ArgumentError , "Zero or negative precision for #{ method_name } " if prec <= 0
26
+ if accept_zero
27
+ raise ArgumentError , "Negative precision for #{ method_name } " if prec < 0
28
+ else
29
+ raise ArgumentError , "Zero or negative precision for #{ method_name } " if prec <= 0
30
+ end
27
31
end
28
32
29
33
def self . infinity_computation_result # :nodoc:
@@ -178,12 +182,12 @@ def power(y, prec = nil)
178
182
# Result has at least prec significant digits.
179
183
#
180
184
def sqrt ( prec )
185
+ Internal . validate_prec ( prec , :sqrt , accept_zero : true )
181
186
if infinite? == 1
182
187
exception_mode = BigDecimal . mode ( BigDecimal ::EXCEPTION_ALL )
183
188
raise FloatDomainError , "Computation results in 'Infinity'" if exception_mode . anybits? ( BigDecimal ::EXCEPTION_INFINITY )
184
189
return INFINITY
185
190
end
186
- raise ArgumentError , 'negative precision' if prec < 0
187
191
raise FloatDomainError , 'sqrt of negative value' if self < 0
188
192
raise FloatDomainError , "sqrt of 'NaN'(Not a Number)" if nan?
189
193
return self if zero?
0 commit comments