12桁以上の演算をするには?


じゅーす  2003-05-08 17:03:59  No: 107040  IP: [192.*.*.*]

12桁以上の演算をする場合には、どのようにすればよいのでしょうか?
12345678901 を 7 で割ったあまりを求めたいのですが。

初歩的なことですみません。

編集 削除
nanashi  2003-05-08 18:00:03  No: 107041  IP: [192.*.*.*]

変数の型がIntegerとかLongとかになってませんか?
Double型にして下さい。

編集 削除
じゅーす  2003-05-08 18:30:56  No: 107042  IP: [192.*.*.*]

Double型でやってはいるのですが。。。

Dim a As Double
Dim b As Double
Dim c As Double

a = 12345678901#
b = 7#

c = a Mod b      ←   ここでオーバーフローとなります。

説明がつたなくてすみません。
よろしくお願いします。

編集 削除
ビビ  2003-05-08 21:15:39  No: 107043  IP: [192.*.*.*]

MODでDouble型は使えないので、別の方法を考えるしかないです。
例えば、元の数を7で割って、答えを元の数から引くとか。

編集 削除
ビビ  2003-05-08 21:23:15  No: 107044  IP: [192.*.*.*]

あ、割った後に小数点以下をIntやFix関数で取り出してから、その数を
元の値から引いてください。

編集 削除
TKO  2003-05-10 16:56:02  No: 107045  IP: [192.*.*.*]

整数を対象とした14桁程度までの計算では通貨型に変換した方が誤差は少ない様です。下記の例ではText1とText2にデータを入れてText5に余りを表示しています。10進数に変換すると大きな数字が使えますが誤差が出て答えが合いませんでした。

Private Sub Command1_Click()
    Dim c
    c = CCur(Text1.Text) / CCur(Text2.Text)  '通貨型変数
    Text3.Text = c
    Text4.Text = Int(c)
    Text5.Text = CCur(Text1.Text) - CCur(Text4.Text) * CCur(Text2.Text)
End Sub

編集 削除
Say  2003-05-11 01:58:44  No: 107046  IP: [192.*.*.*]

あまり参考にならないかもしれませんが・・・

「10進数から2進数に変換する効率のいい方法」に
デシマル型使った例をあげてます。

編集 削除
Say  2003-05-11 02:03:06  No: 107047  IP: [192.*.*.*]

↑は、あまり参考にならなさそうなので、参考になる例を・・・

    Dim buf1, buf2, buf3
    buf1 = "79228162514264337593543950330"
    buf2 = "1000000000000"
    buf3 = Split((CDec(buf1) / CDec(buf2)), ".")
    
    MsgBox "あまりは " & CStr(CDec(buf1) - CDec(buf3(0)) * CDec(buf2))

編集 削除