繁体   English   中英

如何查看答案中有多少位数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM