@@ -146,12 +146,12 @@ def power(y, prec = nil)
146
146
# Result has at least prec significant digits.
147
147
#
148
148
def sqrt ( prec )
149
+ BigMath . _validate_prec ( prec , :sqrt , accept_zero : true )
149
150
if infinite? == 1
150
151
exception_mode = BigDecimal . mode ( BigDecimal ::EXCEPTION_ALL )
151
152
raise FloatDomainError , "Computation results in 'Infinity'" if exception_mode . anybits? ( BigDecimal ::EXCEPTION_INFINITY )
152
153
return INFINITY
153
154
end
154
- raise ArgumentError , 'negative precision' if prec < 0
155
155
raise FloatDomainError , 'sqrt of negative value' if self < 0
156
156
raise FloatDomainError , "sqrt of 'NaN'(Not a Number)" if nan?
157
157
return self if zero?
@@ -190,9 +190,13 @@ def self._coerce_to_bigdecimal(x, method_name, complex_domain_error = false) # :
190
190
raise ArgumentError , "#{ x . inspect } can't be coerced into BigDecimal"
191
191
end
192
192
193
- def self . _validate_prec ( prec , method_name ) # :nodoc:
193
+ def self . _validate_prec ( prec , method_name , accept_zero : false ) # :nodoc:
194
194
raise ArgumentError , 'precision must be an Integer' unless Integer === prec
195
- raise ArgumentError , "Zero or negative precision for #{ method_name } " if prec <= 0
195
+ if accept_zero
196
+ raise ArgumentError , "Negative precision for #{ method_name } " if prec < 0
197
+ else
198
+ raise ArgumentError , "Zero or negative precision for #{ method_name } " if prec <= 0
199
+ end
196
200
end
197
201
198
202
def self . _infinity_computation_result # :nodoc:
0 commit comments