• 締切済み

今、ある数値計算ソフトで2×3×400の配列を扱おうとしているとします

今、ある数値計算ソフトで2×3×400の配列を扱おうとしているとします。なお、 各配列には整数0か1が入るとします。このとき、この配列はメモリ上の容量は いくらになるのでしょうか? 他のケース、例えば同じ次元の配列だが、各配列に1から100までの整数が入るケース や実数が入る場合など、計算できるようになりたいので、計算過程を併せて 教えていただけると幸いです。

みんなの回答

  • starshira
  • ベストアンサー率55% (141/256)
回答No.4

No.2です。 >それが何番目の要素かという情報 No.3さんがおっしゃるように、3次元なら3つの情報だけを持っていればOKです。 質問者様が懸念されているのは、一つ一つの要素に番号を振る必要があるのではないか?ということかと思いますが、 普通はそういうことはしません。(容量が増えてしまいますから) わかりやすいように2次元配列で説明します。 何次元の配列でも、メモリ上では一列に並びます。 たとえば、 A = {1 2 3 4 5 6} という配列があったとします。 (Fortranの配列の書き方が分からないので、適当に書いています) これが2×3の配列だよ、と教えてやれば、 1 2 3 4 5 6 という形に並ぶんだな、ということは自明です(※)。 同様に3×2の配列だ、と教えてやれば、 1 2 3 4 5 6 と並んでいるんことが分かります(※)。 だから、いちいち番号を振る必要はなく、各次元の大きさだけが分かればよいのです。 ※プログラム言語によっては、 2×3の場合に 1 3 5 2 4 6 3×2の場合に 1 4 2 5 3 6 と解釈します。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.3

>プログラム程度なら私のような素人でも書けますが、 >コンピュータの仕組みまではわからないと思います。 いやいや プログラム書く人なら変数型(データに何バイト使うか・どんな値が扱えるのか)などは 基本中の基本ですよ? それが分からなかったらまともなプログラムなんか組めません 表計算がFortranとかかれてますが それは(開発)言語を意味します(Fortranで作成した表計算ソフトって意味かもしれませんが) #2さん書かれてますが整数型変数であれば32ビットや64ビットで 扱われるものが多いですが開発環境やコンパイラによって 実際のバイト数(ビット数)は変わる可能性があります 普通は最低でも8ビット(1バイト)区切りで扱われます 特殊な使い方をすれば1バイトで8個の0/1を8個の変数名のような形で 扱えますがいまどきあまり使用される手法ではありません (その昔メモリが高価だったときにはメモリ消費を少なくするためにそのような手法も使われました) メモリ自体は1バイトで8ビットまでのデータを扱えるので 32ビットの変数を使ったときは4バイトのメモリが使われることになります >それが何番目の要素かという情報 扱いたいのは3次元配列のデータですのでそれぞれの要素の位置を 求める変数(3個の変数)があれば良いことになります ですので全て32ビット変数で確保するのであれば 4バイト(1変数)×(2×3×400+3)=9612 バイトのメモリが必要 ということになります

  • starshira
  • ベストアンサー率55% (141/256)
回答No.2

配列の容量 = 要素の数 × 1要素あたりの容量 です。 要素の数 = 2×3×400 です。 1要素あたりの容量は、プログラムの仕方や、数値計算ソフトの仕様によって異なります。 単純な話をすると、 0か1しか入らないと分かっているのなら、1要素につき1bitの容量で済みます。 だから、1×2×3×400 bit = 2400 bit です。 1bitは容量の最小単位です。 しかし、これは特殊なケースです。 多くの場合、整数と言えば1要素につき32bitか64bitを消費します。 どちらなのかは、数値計算ソフトの仕様によりますので説明書を読んでください。 実数も同様です。 また、あるソフトでは普通は整数1つあたり64bitを消費するが、 プログラムの仕方によっては整数1つあたり32bitに変更することができたりします。 最初の例のように、1要素につき1bitを消費するようにするには、それなりのプログラムを書かないとダメだと思います。 単に「整数だから」「実数だから」「0と1だけだから」というだけでは容量計算できませんので、説明書とにらめっこして計算してください。 以上、質問者様のコンピュータに関する知識量が分からなかったので、できるだけ易しく書きました。 詳しい説明が必要な部分は指摘してください。 (あるいは平易すぎて役に立たないかもしれませんが…)

kdfokn
質問者

お礼

非常に丁寧に解説していただき感謝します。 おかげさまで問題を解決することができました。 素人考えでは配列の各要素のデータに加えて、それが何番目の要素かという 情報も必要になり、果たしてそれがどれくらいの容量になるのかという 疑問が生じます。本来の質問からは少しそれてしまいますが、もしよければ 教えていただけたらと思います。 質問が質問になっていなければ無視してください。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

質問の意味が分かりません ある数値計算ソフトとは何でしょう? 自作ソフトのことですか? >メモリ上の容量はいくらになるのでしょうか? 自作ソフトの話なら自分で定義した型のサイズ(容量) 自作で無いなら何のことやら プログラム書く(書ける)人の質問レベルではないような 気がするんですが 計算過程ってのも何の計算過程なのか意味が分かりません もう少し細かく書いてください

kdfokn
質問者

お礼

数値計算ソフトはFortranです。最近趣味で始めました。 プログラム程度なら私のような素人でも書けますが、 コンピュータの仕組みまではわからないと思います。 ただ、質問の仕方を気をつけるべきですね。ご指摘どうも ありがとうございました。