У меня есть этот код, который принимает digit
и возвращает значение di git, которое находится в этой позиции digit
в sqrt(2)
:
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
с точностью до некоторого ди git, будь то 100-й или 500-й ди git, неважно. Как мне это сделать?
Я нашел этот код, но он также выглядит ограниченным 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;
}