2

このコードに問題があります。私のコーディングは次のとおりです。

    fitvalchild1 = 0
    fitvalchild2 = 0

    For i = 1 To 30                            
        counter = 30

        Do While counter > 0
            fitvalchild1 = fitvalchild1 + child1(counter) * 2 ^ (i - 1)
            fitvalchild2 = fitvalchild2 + child2(counter) * 2 ^ (i - 1)
            counter = counter - 1
        Loop
    Next i

すべての変数はlongとして宣言されます...

それでもエラーが発生します:オーバーフローし、強調表示された行は次のとおりです:

fitvalchild1 = fitvalchild1 + child1(counter) * 2 ^ (i - 1)
4

2 に答える 2

6

データ型のLong最大サイズは2,147,483,647です。
2 ^(30-1)= 536,870,912
なので、との値によっては、最大値を簡単に超えてchild1(counter)しまいfitvalchild1ます。

ループごとに値を追加するため、4〜5回のループの後、エラーが発生する可能性があります。

整数型から切り替えてもかまわない場合は、Currencyデータ型を使用してみてください。最大サイズは922,337,203,685,477.5807です。

于 2012-09-26T17:02:40.187 に答える
1

long データ型の範囲は -2,147,483,648 ~ 2,147,483,647 です。2^29 は限界に非常に近いため、child1 と child2 の値はオーバーフローするほど大きくする必要はありません。

于 2012-09-26T17:04:19.373 に答える