我有这段代码,它接受一个 digit
并返回 sqrt(2)
中该 digit
位置的数字值>:
public static int sqrtTwo(int digit)
{
//1.41421356237…
double result = Math.sqrt(2.0);
String resultString = String.valueOf(result);
if (digit == 0) {
return Integer.parseInt(resultString.substring(0, 1));
}
if (digit + 1 >= resultString.length()) {
digit = resultString.length() - 2;
}
return Integer.parseInt(resultString.substring(digit + 1, digit + 2));
}
但是我只能通过使用它来获取这么多数字。 Math 类将返回一个受限制的 double 。我想计算一个 sqrt
值,直到某个数字,无论是第 100 位还是第 500 位。我该怎么做?
我找到了这段代码,但它看起来也受到 double
的限制:
static double squareRoot(int number, int precision)
{
int start = 0, end = number;
int mid;
// variable to store the answer
double ans = 0.0;
// for computing integral part
// of square root of number
while (start <= end)
{
mid = (start + end) / 2;
if (mid * mid == number)
{
ans = mid;
break;
}
// incrementing start if integral
// part lies on right side of the mid
if (mid * mid < number) {
start = mid + 1;
ans = mid;
}
// decrementing end if integral part
// lies on the left side of the mid
else {
end = mid - 1;
}
}
// For computing the fractional part
// of square root upto given precision
double increment = 0.1;
for (int i = 0; i < precision; i++) {
while (ans * ans <= number) {
ans += increment;
}
// loop terminates when ans * ans > number
ans = ans - increment;
increment = increment / 10;
}
return ans;
}
最佳答案
大十进制构造函数中的“2”是您想要执行什么操作的值,MathContext 中的 1000 是您想要从中获取多少位数字。
这样我就可以将 sqrt(2) 精确到小数点后 1000 位
public static void main(String[] args) {
BigDecimal digits = new BigDecimal("2");
BigDecimal num = digits.sqrt(new MathContext(1000));
System.out.println(num.toString());
}
关于java - 获取 sqrt 的第 n 位数字 : getting digits that exceed the double scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61394846/