带有double的Java round()

时间:2013-11-24 15:55:55

标签: java numerical-methods double-precision

我试图编写一个小程序,在给定的函数f(x)中找到零点。

这是我的想法:

我有X1和X2(用户输入)来定义搜索空点的区域。例如-5和5。

private static double Naehern(double X, double X2) {
    double Y = -1;
    double Step = 0.01;

    while(Y < -0.00001 || Y > 0.00001) {
        X = X + Step;
        Y = f(X);

        if(X >= X2) {
            break;
        }
    }

    return X;
}

static double f(double x) {
    return x * x;
}

我试图在X1和X2之间找到一个点X,其中我的零点的精度约为5.因此,在我的while()中,我从X1开始并在添加+0时继续检查X1 ,01到它。在某些时候它应该找到一个零点。

我目前的想法存在的问题:

对于X1开始为-5,对于X2开始为5时,会发生以下情况:

X: -4,99
X: -4,98
X: -4,9700000000000000001

如何通过仍然使用双打来解决这个问题?

其次我在节目结束时得到这个号码:-6.230779781013496E-14。这是X = -6.230779781013496E-14处找到的零点。如何将此数字转换为“。”之后的5个字符的普通可读双精度数字?

2 个答案:

答案 0 :(得分:0)

a)你不能,除非你使用二进制中可以精确表示的步长,例如1/128而不是1/100(不是)。

b)你可以使用printf("%.5f", ...),但在你的情况下,输出只有0.00000。

答案 1 :(得分:0)

您可以使用System.out.printfString.formatNumberFormat class格式化数字。

浮点数和双打数不是确切的值。如果你想要更高的精度,有比浮动/双倍更好的方法。是的,BigDecimal,我在看着你。