配列処理

変数の種類

値の範囲(一般的に)
2バイト整数 int(一般にshortとも?) -32768 ~ 32767
4バイト整数 long -2147483648 ~ 2147483647
単精度浮動小数点数(4バイト) float ±1.175494×10^(-38)~±3.402823×10^(38)
倍精度浮動小数点数(8バイト) double ±2.225074×10^(-308)~±1.797693×10^(308)
1バイト=8ビットであり、0~255の値を取れる。

単精度と倍精度と有効数字

IEEE 754-2008の規格では,単精度と倍精度のそれぞれのbitの割り当ては
符号部 (bit) 指数部 (bit) 仮数部 (bit)
単精度(32bit) 1 8 23 有効数字6桁
倍精度(64bit) 1 11 52 有効数字15桁
となっている。従って,単精度では仮数部が23 bitなので有効数字は約6桁*1となる.また同様に,倍精度では仮数部が52 bitなので有効数字は約15桁*2となる.ただし,倍精度の場合は使用するメモリも倍増するので注意が必要(計測解析学のプリント参照).

※最近は回路もコンパイラも倍精度で計算する前提で設計されているので倍精度の方が計算は速いらしい。
メモリの節約が必要になるほど大容量のデータを扱う場面も普通は無いだろう。

型変換

a=fix(a)
a=long(a)
a=float(a)
a=double(a)

壱変数の宣言(代入)

a=0 ; int?
a=0l ; long
a=0. ; float
a=0.0d ; double
IDLでは変数の宣言はいらない…らしい。

a='ffffff'x
こうすると、16進数で代入できる。
(見え辛いかもしれないが、値を’’xで囲んでいる)
色の指定などで使えるが,順番はRGBではなくてBGRなので注意。
つまり'0000ff'xが赤で,'ff0000'xが青となる。

注意点(誰か補足してくれ)

float型などの浮動小数点は有効数字の外で誤差を持つ。
下がその例。
z0=44.0 ==> 44.000000
z1=44.1 ==> 44.099998
z2=44.2 ==> 44.200001
z3=44.3 ==> 44.299999
z4=44.4 ==> 44.400002
z5=44.5 ==> 44.500000
z6=44.6 ==> 44.599998
z7=44.7 ==> 44.700001
z8=44.8 ==> 44.799999
z9=44.9 ==> 44.900002
例えば緯度で、0.01度格子のデータを扱う時、
44.4/0.01という計算には4440を期待するのだが、実際の結果は僅かな誤差を持つ。
これにより、データを入れる配列のサイズが合わなくなるといった問題が発生する。

解決方法はround関数。(最終的に求める値が整数の場合に限る)
小数点以下を四捨五入して値を整数にしてくれる。
a=round(44.4/0.01)
とすれば、aの値はピッタリ4440となる。

formatで扱うケタ数を指定するという解決方法もあるが、round関数の方が楽。

配列の宣言

a=intarr(m) ; 長さmの配列
a=intarr(m,n) ; m×n行列
8次元まで増やせる。

a=replicate(b,m,n) ; 要素の値が全てbのm×n行列
カラーテーブルの表示に使えたりする。

bytarr() ; 1バイト整数の配列
intarr() ; 2バイト整数の配列
lonarr() ; 4バイト整数の配列
fltarr() ; 単精度の配列
dblarr() ; 倍精度の配列
strarr() ; 文字列型の配列
ファイルを読む時は適切な配列を宣言しよう。

配列の結合

aを10×3、bも10×3の配列とする。

c=[a,b]
cは20×3の配列に。

c=[[a],[b]]
cは10×6の配列に。

c=[[[a]],[[b]]]
cは10×3×2の配列に。

!NULL

nullは値を持たないという値。
a=!NULL
これでaは定義されているが、値を持たない物になる。
例えばループ文で
for i=0,9 do begin
index=[index,i]
endfor
とすると、indexが定義されてない為にエラーとなるが、
index=!NULL
for i=0,9 do begin
index=[index,i]
endfor
とすれば問題なくループできる。

他、配列の演算

「+-*/^mod><」は全ての要素に対して行われる。
a=a<100
とすると全ての要素で100を超えるものは100になる。
最終更新:2013年07月16日 16:38
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。

*1 *2^23~8.39×10^6

*2 *2^52~4.50×10^15