ここから本文です

Javaのついて質問です。 BigInteger型の変数の平方根を整数に切り上げてBigIntege...

suu********さん

2017/12/823:33:00

Javaのついて質問です。
BigInteger型の変数の平方根を整数に切り上げてBigInteger型(もしくはBigDecimal型に)の変数に入れたいのですができますか。

調べても、BigInteger型の変数の平方根を求めるメゾット?が見つかりませんでした。

初心者なので詳しく教えていただけると幸いです。

閲覧数:
120
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

2017/12/901:43:46

BigIntegerクラスのメソッドとしては、平方根は無いようですね。
Java8のラムダ式を使えば、BigInteger型の変数の平方根を求めるapplyメソッドを造ることができます。

class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
java.util.function.UnaryOperator<BigInteger> squareRootFunction = (inputData) -> {
BigInteger squareRoot1 = inputData.divide(BigInteger.valueOf(2L));
do {
BigInteger squareRoot2 = squareRoot1;
squareRoot1 = inputData.divide(squareRoot2).add(squareRoot2).divide(BigInteger.valueOf(2L));
if(squareRoot1.compareTo(squareRoot2) == 0) return squareRoot1;
} while(true);
};

BigInteger inputData = new BigInteger("1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012");
System.out.println(inputData);
BigInteger 平方根 = squareRootFunction.apply(inputData);
System.out.println(平方根);
BigInteger 検算値 = inputData.divide(squareRootFunction.apply(inputData));
System.out.println(検算値.multiply(検算値));
System.out.println(検算値.multiply(平方根));
}
}
実行結果は、https://ideone.com/1KqZPi

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

とみおさん

2017/12/901:42:55

BigInteger、BigDecimalは基本的に四則演算しかできません
なので、自分でメソッドをつくる必要があります

一番簡単な方法は
変数を1から順番に2乗して対象の数字と比較していく
変数が対象の数字を初めて超えたとき、その変数が求めたい値となります

https://gist.github.com/anonymous/d4ae335299d03b8b964c3683976ecce8

慣れてきたら二分木法で高速化
BigDecimalに変換、y = x² - tergetとみて、二分法やニュートン法などでもよいかと

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる