Android平方根计算错误

时间:2016-10-04 17:27:00

标签: java android square-root

我想制作一个使用Heron算法计算平方根的Java应用程序。但是当我输入9时,它会将2.777777910232544打印到屏幕上。 当我输入1时,它打印1.现在我不知道我是否编写了错误的代码,或者我对Java中的浮点数一无所知。

这是我的代码:

public class MainActivity extends AppCompatActivity {

float length1;
float width1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final TextView mainOutput = (TextView) findViewById(R.id.mainOutput);
    final EditText mainInput = (EditText) findViewById(R.id.mainInput);
    final Button wurzel2 = (Button) findViewById(R.id.wurzel2);

    assert wurzel2 != null;
    wurzel2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            for(int i = 0; i < 20; i++) {
                float inputNumber = Integer.parseInt(mainInput.getText().toString());
                length1 = 1;
                width1 = inputNumber / length1;
                float length2 = (length1 + width1) / 2;
                float width2 = inputNumber / length2;
                length1 = length2;
                width1 = width2;
            }
            double wurzel = length1 / width1;
            mainOutput.setText(String.valueOf(wurzel));
        }
    });
}
}

1 个答案:

答案 0 :(得分:0)

我编写了Heron算法的非Android Java实现,该算法源自https://en.wikipedia.org/wiki/Methods_of_computing_square_roots显示的算法公式

map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

你的代码在循环内有length1 = 1(你的length1相当于我的x),所以 它没有从迭代到迭代的进展。

public class MyClass { public static void main(String[] args) { float x = 9; System.out.println(heron(x)); } static float heron(float s) { float x = (float) 1.0; // initial approximation of result for (int i = 0; i < 20; i++) { float sDivX = s / x; x = (x + sDivX) / 2; // remove this line in production, this is just to watch progress System.out.println(String.valueOf(x)); } return x; } } 可能是比1更好的初始估计值,尤其是对于较大的值。对于输入值的小值,20次迭代可能是过度的。