- ベストアンサー
計算結果がものすごく多いんですが。。。
今、画像処理のプログラムを作成中です。 それで、このような計算式がありまして、 Hue = (b-g) * (pai/3) Hueの計算結果がたくさんあって、数にして311,040個。 (Hueの単位は度で、0°~360°までです。) それで、その結果を配列にいれたいんです。 どうやって配列を作ればいいのか分かりません。 どなたか分かる方、詳しく教えて下さい!!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>大いに疑問です。 大丈夫みたいですよ。 Option Explicit Option Base 0 Private Sub Command1_Click() Dim x(311040) As Double Dim idx As Long For idx = 0 To 311040 x(idx) = idx + 1 Next idx Debug.Print x(0) + x(311040) MsgBox x(0) + x(311040) End Sub Debug.Print と MsgBox は、デバッグ環境、exeにコンパイルしたもの、両方で確認したという意味です。 #ちなみに、最適化もなかなかのもんです。 >Basicの配列のメモリーへの実装方法 詳しく知らないのですが、VBの変数はすべて格納領域へのポインタのようです。Variant型なんてのは、相当複雑なことをやっているようです。 インテル系CPUは、80386(だったか)あたりから、ディスクリプタテーブルを採用しているので、大容量のメモリ領域を擬似的に連続領域のように扱えるコンパイラを作成できます。恐らくVBもそうなのでしょう。 >隔世の感あり。 たしかに、おっしゃるとおりです。 DISK-BAISCのランダムアクセスファイルで8インチFDにPUT,GETしたり、2kBの中にBASICインタプリタを詰め込んでいたTINY-BASICのころは、まるで石器時代の幻ようです。 >メモリーがふんだんに使えるようになると 先日もショップで高校生が「ハードディスクは、30GBじゃたりない」と話していて、ハリ倒してやろうかと思いました。 若者がベテランに「Cの構造体って、C++のクラスみたいなもんですか?」と質問したっていう笑えないジョークもあるくらいで・・・ #かくいう私は、すでに老兵です。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
回答者のルーチンが動くことは確認しました。しかしメモリー容量の 関係から1~例えば320、000個の配列に全て空きなく数をセットして行った時、エラーにならないと言えるでしょうか。大いに疑問です。 Basicの配列のメモリーへの実装方法をご存知の方教えてください。 メモリーが今のように利用できなかった少し前までは、配列では なく、レコードとして、外部記憶装置(Disk)に記録し、それを読んで処理していたと思います。DOS-Basicの固定長ランダムファイルのようなものを使うべきでないのでしょうか。Get #1,nのn=320000とすれば320000番目のレコードの内容が変数(フィールド)にセットされる仕組みがあれば、a=b(320000)と同じではないでしょうか。 ただ処理時間の点で格段の差はあるでしょうが。配列にデータを セットする時も、多量の場合はDiskファイルから読みこんでいませんか。 VBにもPUT,GETステートメントは残されているようです。 メモリーがふんだんに使えるようになると。この質問と 回答者のようなのが当たり前になるのでしょうね。 4Kのメモリーのコンピュターを見聞きしていた者にとって 隔世の感あり。
お礼
まだVB初心者なので説明が上手くできていなかったみたいです。。。 すいませんでした。
- ykkw_2001
- ベストアンサー率26% (267/1014)
dim hue(311040) as double hue(311040)=99.99 msgbox hue(311040) 「こんなんじゃダメだ」ってことなの?
お礼
すいません。ちょっと言い方間違ってました。。。(><)っっ
お礼
ykkw2001さんのを参考にさせて頂いて何とかできました!! しかし、パソコンが古いため計算がめっちゃ遅いです。 学校の研究室なので我慢するしかありません(;;) いろいろ書いてくださってありがとうございました★
補足
すいません。私の説明が悪かったです。 計算結果は311,040個なんですが、それらの全部の値は0°~359°の計360個の配列に分けて入れたいんです。 例えば、Hue=2.6なら小数点以下は切り捨てて、まずHue=2にします。 それを2°の配列に格納し、カウントしていく。 3110,40個の値がそれぞれ入ってしまった後、2°は何個あったか分かるようにしたいんです。 この説明で大丈夫でしょうか? よろしくお願いします!!