2.3 とりあえず2次元ベクトル場

今度は, 2次元のベクトル場を手早く矢印で見たいというときの例題です. 次 の quick5 は簡単な変形場を描くプログラムですが, GRPH2 の UGPACK にあるメソッド(元サブルーチン) ugvect 1つを呼ぶだけで十分です. 前節の等高線 図の場合と同様に, おまかせの座標軸を描画したあとで ugvect ルーチ ンを呼んでベクトル場を描いています.

この例では, やはり, 等間隔の格子点を設定して, それぞれの格子点でのベク トルを矢印で表現します. おまかせ描画のときには, ベクトルの長さが格子点 間隔を越えないようにスケーリングファクターが決定され, それを乗じてベク トルが描かれます. この場合, x成分とy成分のスケーリングファクターは 同じになっていて, 図の下部マージンにはその値が表示されています.

ベクトル場も UGPACK のルーチンを使うことによって高度な作図ができるよ うになります. これも第10章で説明することにしましょう.

# quick5.rb

require "narray"
require "numru/dcl"

include NumRu
include Math

nx = 21
ny = 21
xmin = -1.0
xmax = 1.0
ymin = -1.0
ymax = 1.0

u = NArray.sfloat(nx, ny)
v = NArray.sfloat(nx, ny)

#-- data ----
for j in 0..ny-1
  for i in 0..nx-1
    x = xmin + (xmax-xmin)*i/(nx-1)
    y = ymin + (ymax-ymin)*j/(ny-1)
    u[i,j] = x
    v[i,j] = -y
  end
end

#-- graph ----
iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::gropn iws
DCL::grfrm

DCL::grswnd(xmin, xmax, ymin, ymax)
DCL::grsvpt(0.2, 0.8, 0.2, 0.8)
DCL::grstrn(1)
DCL::grstrf

DCL::usdaxs
DCL::ugvect(u, v)

DCL::grcls

PROGRAM QUICK5

\resizebox{10cm}{!}{\includegraphics{quick/quick5.eps}}
 
 
 
quick5.rb: frame1

 

 

計算機のなまり 2

実数の内部表現

整数の内部表現は,ほとんどの機種で同一の表現となっているのに対して,実 数型変数に関してはいくつかの規格が存在します.

一般に,実数型の変数は浮動小数点の形で表現されます. すなわち,β進法を使った場合,実数は

±(0. f1 f2 f3 ... fm)β× β± E

という形で表されています. ここで,

±(0. f1 f2 f3 ... fm)β 
= ±(f1 ×β-1 +f2 ×β-2+f3 ×β-3+ …  fm×β-m)

 は仮数部で,fiは0からβ-1までの整数(f1 ≠ 0 )です. また,β± Eは指数部で,Eは0または正の整数です.

主要な実数表現として,IBM形式とIEEE(アイ・トリプル・イーと読む)形式と があります.どちらも,32ビットを1語とする点では同じですが,採用されて いる進法が異なり,表現できる実数の範囲や精度に違いがあります.

IBM形式は16進演算が基本になっていて,各ビットの使い方は以下の通りです.  

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
± E+64 f1 f2 f3 f4 f5 f6

IEEE形式は2進法の浮動小数点形式で,IBM形式に比べて相対精度が高いという 特徴があります.各ビットの使い方は以下の通りです.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
± E+124 f2・・・f4 f5 ・・・f8 f9 ・・・f12 f13・・・f16 f17・・・f20 f21・・・f24

このように,同じビット数で実数を表現しても,実数として表現できる範囲や 精度はシステムによって異なります.IBM形式で表される0でない実数は,絶対 値が5.397605× 10-79 〜 7.237005 ×1075の範囲であ り,相対誤差は 6× 10-8 〜 10-6 程度です. 一方, IEEE形 式では,絶対値が1.40129846 ×10-45 〜 3.40282347 ×1038 の範囲の実数が表現できて,相対誤差は 3× 10-8〜 6 ×10-8 程度です.

DCL では,このようなシステム依存の定数を MATH1/SYSLIB の glrset/glrget で管理しています.また,システムに依存する実数表現を解釈する道具が REALLIB です.

詳細は,MISC1 のマニュアル(dcl-x.x/doc/misc1/gaiyou/real.tex)を御覧下 さい.