最近のトラックバック

2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

« Ver. 0.3.0をリリースしました | トップページ | sqrt, exptの結果をなるべく正確な数で表すようにしました »

開平法

筆算における開平法をJavaで実現したソースを以下に示します。
正確な整数の平方根を求めるときに使用できると思います。

参考:
Wikipedia: http://ja.wikipedia.org/wiki/%E9%96%8B%E5%B9%B3%E6%B3%95
ニコニコ大百科: http://dic.nicovideo.jp/a/%E9%96%8B%E5%B9%B3%E6%B3%95

// ------------------------------------------
// This code is public domain.
public class ExactSqrt {

private static int toInt(byte b) {
return (b < 0) ? (b & 0x7f) + 128 : b;
}

private static final int BASE = 16;

public static void main(String[] args) {
byte[] a;
long q = 123454321;
int i = 0;
int s = 0;
int t = 0;
int r = 0;

a = BigInteger.valueOf(q).toByteArray();
while(a[i] == 0);
for(; i < a.length; i++) {
int x = 0;

if(s == 0) {
t = toInt(a[i]);
x = s = (int)Math.sqrt(t);
} else {
int s0 = s;

t = (t * BASE * BASE) + toInt(a[i]);
do {
s = (s0 * BASE) + x;
} while(x++ * s <= t);
x -= 2;
s = (s0 * BASE) + x;
}
t = t - x * s;
s = s + x;
r = (r * BASE) + x;
}

if(t == 0) {
System.out.println("Exact: " + r);
} else {
System.out.println("Inexact: " + r);
}
}

}
// code end
// ------------------------------------------

« Ver. 0.3.0をリリースしました | トップページ | sqrt, exptの結果をなるべく正確な数で表すようにしました »

Java」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 開平法:

« Ver. 0.3.0をリリースしました | トップページ | sqrt, exptの結果をなるべく正確な数で表すようにしました »