如何检查我的答案有多少位数?
How do I check how many digits my answer has?
我试图通过多次调用一个方法来找到最精确的值。我如何检查第 n 次迭代何时会给出 8 位精度的值。我的方法 returns 每次调用它时都会加倍,但我想在结果有 8 位精度时停止调用它。
例如,如果我调用 getValue() 方法 20 次,并且在第 20 次它有一个 8 位数的答案,我如何检查答案并停止代码?
我的方法太长post,所以一般的解释就足够了。
问题如下:
Use the power method to calculate the largest eigenvalue of the Leslie matrix A. The iteration of the power method should stop when you get 8 digits of accuracy.The Leslie Matrix Model can be written as
n(k + 1) = An(k), k = 0, 1, 2,... and with some n(0) given.
老实说,我不相信有一个通用的答案。你怎么知道答案 7.9999999 比 8.0(可能是 8.00000000000000)更精确?我想这可能在很大程度上取决于您要解决的问题。
double
这种方式永远不够精确。要知道你答案的准确性,唯一的方法是对你正在做的操作进行数学分析,并在保证误差小于一定数量时停止。
但是,如果您知道您的分析将会收敛,则有一点技巧。您可以比较连续的值,看看差异有多大。这是一些伪代码:
while(true) {
nextValue = computeNextValue(previousValue);
if(Math.abs(previousValue - nextValue) < ERROR_THRESHOLD) {
break;
}
previousValue = nextValue;
}
@user58697 在评论中提出了一个很好的观点:
Even if the sequence converges, successive difference may stop the process too early. Knowing the convergence rate is vital.
编写程序时请牢记这一点。
您可以使用以下 hack 来检查小数部分。这是完整的代码 -
public class FractionCheck{
public static void main(String[] args){
int length1 = findFractionLegth(423423.98476527);
int length2 = findFractionLegth(428294.31231);
System.out.println(length1);
System.out.println(length2);
}
public static int findFractionLegth(double number){
String numberStr = Double.toString(number);
String fractionalStr = numberStr.substring(numberStr.indexOf('.')+1);
return fractionalStr.length();
}
}
findFractionLegth(double number)
方法计算double
的小数部分。
我试图通过多次调用一个方法来找到最精确的值。我如何检查第 n 次迭代何时会给出 8 位精度的值。我的方法 returns 每次调用它时都会加倍,但我想在结果有 8 位精度时停止调用它。
例如,如果我调用 getValue() 方法 20 次,并且在第 20 次它有一个 8 位数的答案,我如何检查答案并停止代码?
我的方法太长post,所以一般的解释就足够了。
问题如下:
Use the power method to calculate the largest eigenvalue of the Leslie matrix A. The iteration of the power method should stop when you get 8 digits of accuracy.The Leslie Matrix Model can be written as
n(k + 1) = An(k), k = 0, 1, 2,... and with some n(0) given.
老实说,我不相信有一个通用的答案。你怎么知道答案 7.9999999 比 8.0(可能是 8.00000000000000)更精确?我想这可能在很大程度上取决于您要解决的问题。
double
这种方式永远不够精确。要知道你答案的准确性,唯一的方法是对你正在做的操作进行数学分析,并在保证误差小于一定数量时停止。
但是,如果您知道您的分析将会收敛,则有一点技巧。您可以比较连续的值,看看差异有多大。这是一些伪代码:
while(true) {
nextValue = computeNextValue(previousValue);
if(Math.abs(previousValue - nextValue) < ERROR_THRESHOLD) {
break;
}
previousValue = nextValue;
}
@user58697 在评论中提出了一个很好的观点:
Even if the sequence converges, successive difference may stop the process too early. Knowing the convergence rate is vital.
编写程序时请牢记这一点。
您可以使用以下 hack 来检查小数部分。这是完整的代码 -
public class FractionCheck{
public static void main(String[] args){
int length1 = findFractionLegth(423423.98476527);
int length2 = findFractionLegth(428294.31231);
System.out.println(length1);
System.out.println(length2);
}
public static int findFractionLegth(double number){
String numberStr = Double.toString(number);
String fractionalStr = numberStr.substring(numberStr.indexOf('.')+1);
return fractionalStr.length();
}
}
findFractionLegth(double number)
方法计算double
的小数部分。