@JRubyMethod
public IRubyObject sqrt(IRubyObject arg) {
Ruby runtime = getRuntime();
if (isNaN()) throw runtime.newFloatDomainError("(VpSqrt) SQRT(NaN value)");
if ((isInfinity() && infinitySign < 0) || value.signum() < 0) throw runtime.newFloatDomainError("(VpSqrt) SQRT(negative value)");
if (isInfinity() && infinitySign > 0) return newInfinity(runtime, 1);
// NOTE: MRI's sqrt precision is limited by 100,
// but we allow values more than 100.
int n = RubyNumeric.fix2int(arg);