我需要在 x x = N 時找到 x 的值,N 是輸入的值。假設 N 為 27。在此示例中,x 值為 3,因為 27 的立方根為 3,或者 3 3 = 27。如果 N 為 256,則 x 將為 4,因為 4 4 = 256。
我需要找出一個遞回程式來計算 x 的值。這是我到目前為止所擁有的:
public static void main(String[] args) {
Scanner n = new Scanner(System.in);
System.out.println("Enter a number");
double number = n.nextDouble();
}
public static void findXValue(double n) {
double logn = Math.log(n);
...
該findXValue功能使用日志,但它也不起作用。而且我還需要使用遞回方法。任何幫助,將不勝感激
uj5u.com熱心網友回復:
public static double findXValue(double n) {
double result = 0.0;
double number = 0.0;
while(result <= n) {
result = Math.pow(number, number);
if(result == n) {
return number;
}
number ;
}
return -1;
}
uj5u.com熱心網友回復:
我假設 x 可以是浮點數,因為您沒有說。
您可以將其視為尋找函式 F(x) = x x - N 的根的問題。最簡單的方法稱為二分法,其作業原理類似于二分搜索。
從區間 [a, b] 開始,使得 F(a) 和 F(b) 具有相反的符號。對于這個問題,由于函式的性質,總是 F(a)<0 和 F(b)>0。這里如果 N > 1,則從 [1,N] 開始。如果 0 <= N < 1,則使用 [N,1]。(如果 N = 1,則 x = 1)。
之后,迭代。計算 x = (a b)/2。如果 F(x) 和 F(a) 具有相同的符號(負),則設定 a=x。否則 F(x) 必須與 F(b) 具有相同的符號(正),因此設定 b=x。
當 a 和 b 最多相差一個最小精度單位(可能的最小浮點差??)時,停止并回傳 a。
這種迭代很容易表示為遞回。我不會給你答案的。
double solve(double a, double b, double n) {
if (b - a <= ULP) return a;
// all the fun happens here
}
同樣的技術也適用于整數,但在計算中點時要小心溢位和舍入錯誤。
uj5u.com熱心網友回復:
使用牛頓法逼近根。
import java.util.Scanner;
public class XPowerX {
static final double PRECISION = 0.00001;
static final int MAX_RECURSION = 10000;
public static void main(String[] args) {
Scanner n = new Scanner(System.in);
System.out.println("Enter a number");
double number = n.nextDouble();
System.out.println(findXValue(number));
}
public static double findXValue(double n) {
double seed = Math.random();
double y = Math.pow(seed, seed);
double derivative;
for(int i = 0; i < MAX_RECURSION; i ) {
if (Math.abs(y) <= PRECISION) {
return seed;
}
y = Math.pow(seed, seed);
derivative = y * Math.log(seed) y;
y -= n;
// The derivative is used as the slope of tangent line
// Newton's method
seed = seed - y / derivative;
if(seed < 0) {
seed = 0;
}
}
return -1;
}
}
輸出:
Enter a number
16
2.7453680235674636
Enter a number
0.8
0.7395336501071896
Enter a number // No real root
0.3
-1.0
Enter a number // Overflow (NaN)
125000
-1.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/469257.html
上一篇:四舍五入到串列中最接近的數字
下一篇:如何從大數轉換為短加Exp?
