« トキワハゼ | トップページ | ハハコグサ »

2015年2月24日 (火)

√2 の話:その26:整数平方根:3

★C言語による 最新 アルゴリズム事典 奥村晴彦 著、技術評論社、平成3年2月25日、初版第1刷発行
この本を眺めていましたら
「整数x(非負の)平方根の整数部分を求めるには・・・」
という記述がありまして、C言語特有の書き方がしてあるのですが、要するに、ニュートン法を整数で実行すればよい、ということのようでした。
そうなんだ、そういう考え方もあったのか、とVBAで早速試してみました。
*******************
Option Explicit     '変数宣言を強制する、という宣言

Sub main()
    Dim i As Long

    For i = 0 To 40
       Cells(i + 1, 1).Value = i
       Cells(i + 1, 2).Value = isqrt(i)
       Cells(i + 1, 3).Value = Int(Sqr(i))
    Next i
End Sub

Function isqrt(n As Long) As Long
    Dim s As Long, t As Long

    If (n = 0) Then
        isqrt = 0
    Else
        s = n
        Do
            t = s
            s = (s + (n \ s)) \ 2
        Loop While (s < t)
        isqrt = t
    End If
End Function
*******************
ここで「\」という記号がありますが、これは整数除算の演算子です。
例えば「10 \ 3」を実行すると。「3」が返ってきます。
「商」を返す演算子ですね。
実行結果は
0    0    0
1    1    1
2    1    1
3    1    1
4    2    2
5    2    2
6    2    2
7    2    2
8    2    2
9    3    3
10    3    3
11    3    3
12    3    3
13    3    3
14    3    3
15    3    3
16    4    4
17    4    4
18    4    4
19    4    4
20    4    4
21    4    4
22    4    4
23    4    4
24    4    4
25    5    5
26    5    5
27    5    5
28    5    5
29    5    5
30    5    5
31    5    5
32    5    5
33    5    5
34    5    5
35    5    5
36    6    6
37    6    6
38    6    6
39    6    6
40    6    6
----------------------------------------
ホントだ。
私の奇数列を足していく、というプログラムと全く同じ結果を得ました。
当たり前ですね。
しっかしまぁ、こんな関数に利用価値があるとはとても思えませんが、もし必要でしたら、私のアルゴリズムでも、奥村さんのアルゴリズムでも、お使いください。
移植性は抜群でしょ。あまりにも単純だからなぁ。

« トキワハゼ | トップページ | ハハコグサ »

理科おじさん」カテゴリの記事

コメント

コメントを書く

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

« トキワハゼ | トップページ | ハハコグサ »

2017年11月
      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    
サイト内検索
ココログ最強検索 by 暴想
無料ブログはココログ