2

オンラインで検索して見つけたこのエラーへの参照はすべて、私の状況にはまったく当てはまりませんでした。それらは、ドットを含むある種の変数a.b(つまり、構造体) を扱っていましたが、私は厳密に配列を使用しています。ドットを含むものは何もなく、私のコードもそれについて尋ねません。

わかりました、私はこのGINORMOUS配列と呼ばれていtier2comparatorconnectionpointsます。これは、サイズ 400×10×20×10 の 4 次元配列です。を検討してくださいtier2comparatorconnectionpoints(counter,counter2,counter3,counter4)

  • counterは、1_400
  • counter2は への数1numchromosomes(counter)あり、numchromosomes(counter1)にバインドされています10
  • counter3は への数1tier2numcomparators(counter,counter2)あり、これはさらに に制限され20ます。
  • counter4はに制限される まで1の数値です。tier2inputspercomparator(counter,counter2,counter3)10

さて、RAM が不足しないように、tier2comparatorconnectionpointsas typeを持っていますがint8、残念なことに、恐ろしい量のコードのある時点で、それをdouble使って計算しているときに a にキャストするのを忘れ、丸めエラーが発生しました。それを乗算することに関与し、その入力のいくつかの値が許可されている値を超えてしまいますrandtier2comparatorconnectionpoints4

持つことができる値は 1 ~、tier1numcomparators(counter,counter2)これは にバインドされ、4041、 ~40+tier2numcomparators(counter,counter2)にバインドさtier2numcomparators(counter,counter2)れています。未満であるがより大きいことは許可されており、未満であるがより大きいことは許可されていません。どこかに設定されていたので問題に気づきました。206160+tier2numcomparators(counter,counter2)80tier2numcomparators(counter,counter2)2060+tier2numcomparators(counter,counter2)40tier1numcomparators(counter,counter2)6040+tier2numcomparators(counter,counter2)81

ちなみに、これは進化シミュレーションであり、シミュレートされた生物の自然淘汰です。tier2comparatorconnectionpointsの値が許容範囲を超えることを許しているコードの部分を突き止める必要があります。しかし、それは別の問題です。

tier1numcomparators(counter,counter2)私のデータの一時的40な修正は、少なくともその許容値に準拠するようにするためですtier1numcomparators(counter,counter2)。よりも大きいもの。に設定されていたため、最初にこの問題を発見しました。40+tier2numcomparators(counter,counter2)6040+tier2numcomparators(counter,counter2)60+tier2numcomparators(counter,counter2)60+tier2numcomparators(counter,counter2)8160+tier2numcomparators(counter,counter2)60+20tier2numcomparators20

これが多すぎる情報ではないことを願っていますが、これらがどのような種類の変数であるかを理解してもらう必要があるのではないかと感じました.

したがって、少なくともデータを有効なデータに変換しようとして、次のことを行いました。

for counter=1:size(tier2comparatorconnectionpoints,1)
 for counter2=1:size(tier2comparatorconnectionpoints,2)
  for counter3=1:size(tier2comparatorconnectionpoints,3)
   for counter4=1:size(tier2comparatorconnectionpoints,4)
    if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)>60+tier2numcomparators(counter,counter2)
     tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)=60+tier2numcomparators(counter,counter2);
    end
   end
  end
 end
end

そして、それはうまくいきました。その後:

for counter=1:size(tier2comparatorconnectionpoints,1)
 for counter2=1:size(tier2comparatorconnectionpoints,2)
  for counter3=1:size(tier2comparatorconnectionpoints,3)
   for counter4=1:size(tier2comparatorconnectionpoints,4)
    if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)>40+tier2numcomparators(counter,counter2)
     if tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)<60
      tier2comparatorconnectionpoints(counter,counter2,counter3,counter4)=40+tier2numcomparators(counter,counter2);
     end
    end
   end
  end
 end
end

そして、それは「非構造体配列のフィールドを参照しようとしています」と言ったところです。

4

1 に答える 1