N88-BASICで開平方
2022/7/11(月)
N88-BASICで開平方
開平方(平方根を筆算で求める方法)で
平方根を求めます
開平方の手順を2の平方根を例に解説します
2を小数点を基準に2桁ずつ区切ります
× ≦2(初めの2桁の数字)
を満たす最大の整数( =1)を見つけ
縦にならべ、足した値を下に書き、
掛けた値を2から引き、
次の2桁を下ろしてくる
1
1 √02.00 00 00 00 …
+1 - 1 ←(1×1)
2 1 00
2 × ≦100(引いた値と次の2桁の数字)
を満たす最大の整数( =4)を見つけ
答えに追加し
足した値を下に書き、
掛けた値を100から引き、
次の2桁を下ろしてくる
1. 4
1 √02.00 00 00 00 …
+1 -1
24 1 00
+ 4 - 96 ←(24×4)
28 4 00
以下繰り返し
1. 4 1
1 √02.00 00 00 00 …
+ 1 -1
24 1 00
+ 4 - 96
2 81 4 00
+ 1 -2 81 ←(2 81×1)
2 82 1 19 00
1. 4 1 4
1 √02.00 00 00 00 …
+ 1 -1
24 1 00
+ 4 - 96
2 81 4 00
+ 1 -2 81
28 24 1 19 00
+ 4 -1 12 96 ←(28 24×4)
28 28 6 04 00
1. 4 1 4 2
1 √02.00 00 00 00 00 …
+ 1 -1
24 1 00
+ 4 - 96
2 81 4 00
+ 1 -2 81
28 24 1 19 00
+ 4 -1 12 96
2 82 82 6 04 00
+ 2 -5 65 64 ←(2 82 82×2)
2 82 84 39 36 00
([a]はガウス記号でaを超えない最大の整数)
2□×□ ≦100を見つけるのは(□=0,1,2,…,9)
a = 20、b = 100として
c = [b / (a+9)] = [100 / 29] = 3)
①
d = [b / (a+c)] = [100 / 23] = 4
if c=d then □ = d else c = dとして①へ
c = 4、d = [b / (a+c)] = [100 / 24] = 4)
となり、□ = 4
になります
取り敢えず上記動作をするプログラムをつくり大変
分かりにくくなってしまいましたがご了承して下さい
結局計算に倍精度を使用しているため約16桁の
数値しか扱えず途中で誤差が出ます
誤差覚悟で1D+36以上になるまでは
計算を続けています
√x、(x=2,3,5)は比較の為Windows付属の関数電卓の
値を表示しています
また他xの値の比較の為BASICのSQR(X)の値も
表示しています
結果は16桁の精度の計算で16桁以上の√の値を
計算できているようです
VL,NL,XL-BASICとblg~.zip(sqr001.bas)は
以下のリンクからダウンロードできます
N88-BASICで開平方
開平方(平方根を筆算で求める方法)で
平方根を求めます
開平方の手順を2の平方根を例に解説します
2を小数点を基準に2桁ずつ区切ります
× ≦2(初めの2桁の数字)
を満たす最大の整数( =1)を見つけ
縦にならべ、足した値を下に書き、
掛けた値を2から引き、
次の2桁を下ろしてくる
1
1 √02.00 00 00 00 …
+1 - 1 ←(1×1)
2 1 00
2 × ≦100(引いた値と次の2桁の数字)
を満たす最大の整数( =4)を見つけ
答えに追加し
足した値を下に書き、
掛けた値を100から引き、
次の2桁を下ろしてくる
1. 4
1 √02.00 00 00 00 …
+1 -1
24 1 00
+ 4 - 96 ←(24×4)
28 4 00
以下繰り返し
1. 4 1
1 √02.00 00 00 00 …
+ 1 -1
24 1 00
+ 4 - 96
2 81 4 00
+ 1 -2 81 ←(2 81×1)
2 82 1 19 00
1. 4 1 4
1 √02.00 00 00 00 …
+ 1 -1
24 1 00
+ 4 - 96
2 81 4 00
+ 1 -2 81
28 24 1 19 00
+ 4 -1 12 96 ←(28 24×4)
28 28 6 04 00
1. 4 1 4 2
1 √02.00 00 00 00 00 …
+ 1 -1
24 1 00
+ 4 - 96
2 81 4 00
+ 1 -2 81
28 24 1 19 00
+ 4 -1 12 96
2 82 82 6 04 00
+ 2 -5 65 64 ←(2 82 82×2)
2 82 84 39 36 00
([a]はガウス記号でaを超えない最大の整数)
2□×□ ≦100を見つけるのは(□=0,1,2,…,9)
a = 20、b = 100として
c = [b / (a+9)] = [100 / 29] = 3)
①
d = [b / (a+c)] = [100 / 23] = 4
if c=d then □ = d else c = dとして①へ
c = 4、d = [b / (a+c)] = [100 / 24] = 4)
となり、□ = 4
になります
取り敢えず上記動作をするプログラムをつくり大変
分かりにくくなってしまいましたがご了承して下さい
結局計算に倍精度を使用しているため約16桁の
数値しか扱えず途中で誤差が出ます
誤差覚悟で1D+36以上になるまでは
計算を続けています
√x、(x=2,3,5)は比較の為Windows付属の関数電卓の
値を表示しています
また他xの値の比較の為BASICのSQR(X)の値も
表示しています
結果は16桁の精度の計算で16桁以上の√の値を
計算できているようです
VL,NL,XL-BASICとblg~.zip(sqr001.bas)は
以下のリンクからダウンロードできます
https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい