Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带双精度的Java round()_Java_Numerical Methods_Double Precision - Fatal编程技术网

带双精度的Java round()

带双精度的Java round(),java,numerical-methods,double-precision,Java,Numerical Methods,Double Precision,我正试图编写一个小java程序,在给定的函数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 =

我正试图编写一个小java程序,在给定的函数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;
}
我如何通过仍然使用双打来解决这个问题

其次,我在节目结束时得到了这个号码:
-6.230779781013496E-14
。这是在
X=-6.230779781013496E-14
处找到的空点。我怎样才能把这个数字转换成一个普通可读的双精度数字,在“.”后面加上5个字符?

a)你不能,除非你使用一个完全可以用二进制表示的步长,比如1/128而不是1/100(不是1/100)


b) 您可以使用
printf(“%.5f”,…)
,但在您的情况下,输出将仅为0.00000

您可以使用
System.out.printf
String.format
NumberFormat class
来格式化数字


浮点和双精度不是精确的值。如果您想要更高的精度,有比float/double更好的方法。是的,
BigDecimal
,我在看你。

浮点和双精度总是值的近似值。它们对科学和工程计算很有用,但对数学和金融却不太有用。如果你知道你要做的计算是精确的,并且有一个已知的固定精度,那么这是一个考虑使用BigDeCimple而不是双的好时机。我仅次于SCOTTB的建议。如果数字精度很重要,你真的需要学习如何使用BigDecimal。是的,我知道如何格式化它,我也可以使用Math.round(X*10000)/10000,但在这种情况下,它只能在0.0中恢复。我的问题是:如何阻止程序计算这些超小的数字?我只想要X=0.00034,而不是0.0000000000000000000000000000000000253。怎么用?我用while(Y<-0.00001 | | Y>0.00001)试过了。@user2999582你无法阻止它。这就是IEEE浮点运算的工作原理。使用BigDecimal@user2999582 Radiodef原则上是正确的,但请注意我在a点中所说的。如果您选择具有精确表示的数字,则这些数字的和与差也将是精确的。因此,如果你从5.0开始,然后以0.0078125(1/128)开始,你将不会遇到那些“超小数字”。
X: -4,99
X: -4,98
X: -4,9700000000000000001