エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

ビジュアルプログラミング(19)

プログラム電卓(Blockly)(7)

プログラム電卓(Blockly)」の説明の続きです。各領域の番号は「ビジュアルプログラミング(14) - エレファント・コンピューティング調査報告」を参照してください。

平方根」の使い方

(11)のリストから「平方根」を選択すると(12)の領域にサンプルのテキスト(JSON)が表示されます。その後(10)のボタンを押すと(2)の領域に「平方根」のサンプルが表示されます。

  • ボタン1 : (4)の領域の  x に任意の自然数を指定して、(3)の「1」のボタンを押すと、(4)の領域に  y=\sqrt{x} z y の整数部分(小数点より上の部分)が表示され、(5)の領域に  x-z^2 を10進数で書いたときの各桁が、(6)の領域に  z を10進数で書いたときの各桁が表示されます。さらに  a=9 がセットされます。
  • ボタン2 : ボタン1の後、(3)の「2」のボタンを押すと、(6)の領域(この値を  z' とします)の  2 倍の後に  a を追加したもの( 20z'+a)が(7)の領域に表示されます。
  • ボタン3 : その後、(3)の「3」のボタンを押すと、(6)の領域を  a 倍します( 20z'a+a^2)。
  • ボタン4 : その後、(3)の「4」のボタンを押すと、(5)の領域が(7)の領域以上のときは次の桁に進みます。(5)の領域から(7)の領域を引き、(5)の領域の後に  0 を2個追加し、(6)の領域の後に  a を追加します。さらに  a=9 とします。(5)の領域が(7)の領域より小さいときは  a を次の候補にします( a 1 減らします)。
  • ボタン5 : (3)の「5」のボタンを押すと、ボタン2、ボタン3、ボタン4を続けて実行します。
  • ボタン6 : (3)の「6」のボタンを押すと、次の桁に進むまでボタン5を繰り返して実行します。これで平方根の一桁が計算できます。
  • ボタン7 : (3)の「7」のボタンを押すと、 c で指定した桁数の平方根を計算します。

各桁の求め方は関数プログラミングと無限論理多項式(1) - エレファント・コンピューティング調査報告に書いていますが少し修正します。

 r_0 = 0 q_0 = x とします。 n = 0, 1, \cdots に対して  r_n (小数点以下  n 桁目までの値)、 q_n h_n a_n \in D = \{0, 1, \cdots, 9\} (小数点以下  n 桁目)を以下のように決めます。

  • (6)  r_{n+1} = r_n + 10^{-n} a_n
  • (5)  q_n = q_0 - r_n^2
  • (7)  h_n = r_{n+1}^2 - r_n^2 = q_n - q_{n+1} = r_n \cdot 10^{-n} a_n \cdot 2 + 10^{-2n} a_n^2
  •  a_n = \max\{ a_n \in D \mid r_{n+1}^2 \le q_0 \} = \max\{ a_n \in D \mid h_n \le q_n \}

このようにすると  a_n平方根の小数点以下  n 桁目となります。