我试图编写一个小程序,在给定的函数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个字符的普通可读双精度数字?
答案 0 :(得分:0)
a)你不能,除非你使用二进制中可以精确表示的步长,例如1/128而不是1/100(不是)。
b)你可以使用printf("%.5f", ...)
,但在你的情况下,输出只有0.00000。
答案 1 :(得分:0)
您可以使用System.out.printf
,String.format
或NumberFormat class
格式化数字。
浮点数和双打数不是确切的值。如果你想要更高的精度,有比浮动/双倍更好的方法。是的,BigDecimal
,我在看着你。