[英]How do I check how many digits my answer has?
我试图通过多次调用方法来找到最精确的值。 如何检查第n次迭代何时会给出8位精度的值。 每次调用它时,我的方法都会返回一个double值,但是当结果的精度为8位时,我想停止调用它。
例如,如果我调用方法getValue()20次,并且在20次调用具有8位数字的答案,如何检查答案并停止代码?
我的方法发布时间太长,因此一般的解释就足够了。
问题如下:
使用幂方法计算莱斯利矩阵A的最大特征值。当精度达到8位时,幂方法的迭代应停止。莱斯利矩阵模型可以写为
n(k + 1) = An(k), k = 0, 1, 2,... and with some n(0) given.
double
永远不会以这种方式足够精确。 知道答案准确性的唯一方法是对正在执行的操作进行数学分析,并在保证误差小于一定数量时停止运行。
但是,如果您知道分析将趋于一致,则有一些技巧。 您可以比较连续的值,看看差异有多大。 这是一些伪代码:
while(true) {
nextValue = computeNextValue(previousValue);
if(Math.abs(previousValue - nextValue) < ERROR_THRESHOLD) {
break;
}
previousValue = nextValue;
}
@ user58697在评论中很重要:
即使序列收敛,连续的差异也可能过早停止该过程。 了解收敛速度至关重要。
编写程序时请记住这一点。
老实说,我不认为有一个通用的答案。 您如何知道答案7.9999999比8.0(可能是8.00000000000000)更精确? 我想这可能很大程度上取决于您要解决的问题。
您可以使用以下技巧检查小数部分。 这是完整的代码-
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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.