|
▼ichinose さん:
>こんばんは、皆さん。
>>早速やってみましたが、これとはちょっと違うような・・・・・
>>無限にでも計算出来る様な計算式(マクロ)が・・・・・・・・・
>中学だったかな?高校1年生だったかな?
>平方根の筆算(私のころは、縦書きの計算と呼んでいました)
>を習ったことがありました。
>
>意味もわからず、機械的に方法だけはマスターした記憶があります。
>ありますが、これ使わないんですよね!!(試験にもでなかったし・・)
>で調べると、
>
>http://homepage1.nifty.com/moritake/sansu/6/heihoukon/PAGE001.HTM
>
>バビロニアにおける平方根の求め方というらしいです。
>
>'==================================
>Sub main()
> For idx = 1 To 10
> Cells(idx, 1).Value = "'" & sqr_calc(idx, 100)
> Next
>End Sub
>'=======================================================================
>Function sqr_calc(myvalue As Variant, Optional lpmax As Long = 10) As string
>'Input---myvalue---平方根
>' lpmax-----計算回数
>'out-----sqr_calc---myvalueの平方根
> Dim wk As Double
> Dim wk2 As Double
> Dim ans As String
> Dim vidx As Long
> Dim jdx As Long
> Dim nextketa As Long
> Dim lpcnt As Long
> Dim period As Boolean
> period = False
> wk = Int(CStr(myvalue))
> Do Until wk < 100
> wk = wk \ 100
> Loop
> vidx = Len(CStr(wk)) + 1
> ans = ""
> wk2 = 0
> retcode = 0
> lpcnt = 0
> Do While retcode = 0 And lpcnt < lpmax
> For jdx = 9 To 0 Step -1
> If (wk2 * 10 + jdx) * jdx <= wk Then
> wk = wk - (wk2 * 10 + jdx) * jdx
>
> wk2 = CDbl(wk2) * 10 + jdx * 2
> ans = ans & jdx
> Exit For
> End If
> Next jdx
> GoSub get_next_data
> lpcnt = lpcnt + 1
> Loop
> sqr_calc = IIf(InStr(ans, ".") = Len(ans), Left(ans, Len(ans) - 1), ans)
> Exit Function
>get_next_data: '次の二桁を読み込む Input---wk, out---wk,ans(小数点をつけるときのみ)
> nextketa = 0
> Do While vidx <= Len(CStr(myvalue)) And nextketa < 2
> If Mid(CStr(myvalue), vidx, 1) = "." Then
> ans = ans & "."
> period = True
> Else
> wk = wk * 10 + CDbl(Mid(CStr(myvalue), vidx, 1))
> nextketa = nextketa + 1
> End If
> vidx = vidx + 1
> Loop
> If nextketa < 2 Then
> If period = False Then
> ans = ans & "."
> period = True
> End If
> wk = wk * 10 ^ (2 - nextketa)
> End If
> If nextketa = 0 And CDbl(wk) = 0# Then
> retcode = 1
> Else
> retcode = 0
> End If
> Return
>End Function
>
>もっとも計算回数が大きいと誤差も大きいと思いますけど・・・。
>確認してみてください。
これって、もしかしてC言語かな
DOSのコンパイラダウンロードから初めてみます。
|
|