8/10(日) 掛川・曇

 オープンキャンパス二日目。ワシんとこは4年生が頑張って説明してくれているので非常に助かります。今日もよろしゅーに。埋め合わせはどっかでするので~。
 昨日は昨年以上に来場者が多かったけど,今日はどうかなぁ。マイナー私大,特に文系ではとんでもない状況になっているところもあるようだけど(内田先生のblogにその例が報告されてた・・・多分あそこだ),ウチの場合,就職率がいいってところは県内の高校の先生方からは評価して貰っているのが救いか。今日も頑張りましょう・・・いや,よろしくお願いします~>うちの研究室・4年生の方々
 鬱対策のため,今年は久々にコミケ三日目に遊びに行こうと計画している(もちろん午後からまったりと参加予定)。このクソ暑い中,更に欲望で渦巻くあの巨大なビッグサイト内をうろつくのは自殺行為に等しいのだが,鬱を払うにはそのぐらいの荒療治が必要と判断したため(うそつけ)。
 そしたらこんな緊急告知が出ていたのを知る。ふーん,あっちこっちで妨害デンパ野郎が出没しているから,警察としても持ち物検査ぐらいきちんとやれ,と言わざるを得ないってことか。まーしゃーないかな。ワンフェスでエスカレーターの事故があったばかりだし,動線の移動はやむを得まい。事故原因がハッキリしない以上,乗らない・動かさないってのが吉ってこってすな。
 初等関数(IEEE754の範囲内)はどうやって計算しているのか,というお問い合わせがあったので,x86系CPUに限ってだが,ちょっと調べてみた。こう言う時に大変重宝するのが,Mullerの本とIFスペシャル「数値演算プロセッサ」(20年以上前のムック,書誌情報はこっちを見てね),そしてIntelの巨大なリファレンス。最新のIA-32の解説はこっち,歴史的な話はこちらのAppendix Gが使える。
 結論から言えば,i80386(7)以来,IA-32 CPUでは四則演算の他,

平方根: FSQRT(sqrt(x))
三角関数: FSIN(sin(x)), FCOS(cos(x)), FSINCOS(sin(x)&cos(x)), FPTAN (tan(x)), FPATAN(arctan(x))
指数・対数関数: F2XM1(2^x – 1), FYL2X(y * log_2(x)), FYL2XP1(y * log_2(x + 1))

が基本命令としてサポートされており,より複雑な関数を計算するためにはこれらを組み合わせてプログラムを作る必要がある。
 で,これらの基本命令ではIntel CPUの場合,8087 – 80487まではCORDIC(+有理近似),Pentium以降は(有理)多項式近似 + 区間数表法(Table-based method)を使ってCPU内部のMicrocodeで計算を行っているらしい。CORDICだとMicrocode(8087では500行以内とか)が小さくて済むので,古いCPUでは普通に使われていた模様。最近のものは区間縮小の手間を省くために,区間毎に近似式を変えて計算する方式が主流とのことである。CORDICについてはMullerの本が一番詳しい(Mapleコードつき)のでそっちを参考にしてくれたまへ。
 そんでは今日も出撃します。