web-dev-qa-db-ja.com

ビルトインを使用せずに数値の平方根を計算するにはどうすればよいですか?

特定のnunberのsqrtを返すメソッドを作成するにはどうすればよいですか?

例:sqrt(16)は4を返し、sqrt(5)は2.3を返します...
Javaを使用しており、Math.sqrt() AP​​I関数を知っていますが、メソッド自体が必要です。

14

組み込み関数を使用せずに特定の数値の平方根を見つけるJavaプログラム

public class Sqrt
{

  public static void main(String[] args)
  {
    //Number for which square root is to be found
    double number = Double.parseDouble(args[0]);

    //This method finds out the square root
    findSquareRoot(number);

}

/*This method finds out the square root without using
any built-in functions and displays it */
public static void findSquareRoot(double number)
{

    boolean isPositiveNumber = true;
    double g1;

    //if the number given is a 0
    if(number==0)
    {
        System.out.println("Square root of "+number+" = "+0);
    }

    //If the number given is a -ve number
    else if(number<0)
    {  
        number=-number;
        isPositiveNumber = false;
    }

    //Proceeding to find out square root of the number
    double squareRoot = number/2;
    do
    {
        g1=squareRoot;
        squareRoot = (g1 + (number/g1))/2;
    }
    while((g1-squareRoot)!=0);

    //Displays square root in the case of a positive number
    if(isPositiveNumber)
    {
        System.out.println("Square roots of "+number+" are ");
        System.out.println("+"+squareRoot);
        System.out.println("-"+squareRoot);
    }
    //Displays square root in the case of a -ve number
    else
    {
        System.out.println("Square roots of -"+number+" are ");
        System.out.println("+"+squareRoot+" i");
        System.out.println("-"+squareRoot+" i");
    }

  }
}

おそらく、いくつかの近似方法を使用する必要があります。

見て

平方根の計算方法

11
Adriaan Stander

このバージョンは、sqrtを計算する最も一般的な方法であるニュートン法を使用しており、入力が実際に整数であることをチェックしませんが、問題をうまく解決するはずです。

int num = Integer.parseInt(input("Please input an integer to be square rooted."));
while(0.0001 < Math.abs(guess * guess - num)){
    guess = (guess + num / guess) / 2;
}
output(Integer.toString(guess));

2行目は、現在の推測が実際の結果にどれだけ近いかをチェックし、十分に近い場合はループを中断します。 3行目では、ニュートン法を使用して、sqrtの真の値にさらに近づきます。これがお役に立てば幸いです。 :)

8
democidist

ここで考慮すべき点があります。

平方根を見つけるには、2の累乗に累乗した数を見つける必要があります(プログラムでそれ自体を掛けるだけの方がプログラムではるかに簡単ですが;))入力を返します。

だから、推測から始めましょう。製品が小さすぎる場合は、もっと大きいと思います。新製品が大きすぎる場合、あなたはそれを絞り込みました-中間のどこかだと思います。あなたは私がどこへ行くのかわかります...

精度やパフォーマンスのニーズに応じて、さまざまな方法があります。この投稿でほのめかされたソリューションは、これらのカテゴリのいずれにおいても最良のものではありませんが、それはあなたに一つの方法への手がかりを与えます。

7
Tomas Aschan

私が発明した(または場合によっては再発明した)これは次のとおりです。

次の推測=((推測2)+ N)/(2×推測)

例:

10の平方根、最初の推測は、たとえば、10です:

Guess1 = (100+10)/20=5.5

Guess2 = (30.25+10)/(2*5.5)= 3.6590909090...

Guess3 = (13.3889+10)/(3.65909090*2)=3.196005082...

等.

3.16227766...またはその周辺を取得します。

これは実際には私の元のメソッドの簡略版です

推測+((N +推測2 )/(2×推測))

バフシャリの方法 のようなひどい見た目です。

5
Morgan