java - 如何检查我的答案有多少位数?

标签 java algorithm floating-point double iteration

我试图通过多次调用一个方法来找到最精确的值。我如何检查第 n 次迭代何时会给出 8 位精度的值。我的方法每次调用它时都会返回一个 double 值,但我想在结果有 8 位精度时停止调用它。

例如,如果我调用 getValue() 方法 20 次,并且在第 20 次它得到一个有 8 位数字的答案,我如何检查答案并停止代码?

我的方法太长,无法发布,所以一般性解释就足够了。

问题如下:

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.

最佳答案

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.

编写程序时请牢记这一点。

关于java - 如何检查我的答案有多少位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150811/

相关文章:

Java 8,流与另一个基于列表索引

java - 在 Java 8 Streams 上实现自定义中间操作

java - 选项对话框中是否可能有jtable行

c++ - IEEE754 float 在多大程度上满足 LessThanComparable?

c# - 编程 float 运动

algorithm - 有关于物流的资源吗?

c - 计数器的用户输入

algorithm - 如果机器有 64 位字,将两个 129 字的数字相乘需要多少位?

c - 使用 %f 格式说明符打印 int

math - float 学坏了吗?