RSS

 

RSS


プ:相対より絶対

  • いわいまさか
  • at 2012/4/25 11:43:13

相対より絶対

プログラミングには向いてる考え。新人研修ようにネタ出ししたけど使わなかったもの。プログラミング以外にも役にたつかも。

プログラミングにおいて、「相対より絶対で表現した方がバグが入りづらい、扱いやすい」という話。

例:
詳細
・整数で固定小数点データを扱う。
・全般的には上16bitが整数、下16bit小数であつかう
・関数funcは上8bit整数、下24bit小数の入出力
※便宜上シフト時のアンダーフローオーバーフロー対応は割愛
というような場合

1.内容的にはまちがってないが、しゃらっと書いた例
int   num=init();       //   上16bitが整数部、下16bitが小数部
num=<<8 ;            //  funcに入れるために8ビットシフト
num=func(num);
num=>>8;         //  またもとの系に戻して終了

根底にある考えは「8bitシフトアップしたから、あとで8bitシフトダウンすればいいじゃん」

2.絶対的な表現で書いた例
int num16=init();
int num8=num16<<8;
int ret8=func(num16);
int ret16=ret8>>8;

変数名をみるとそれの整数部が何ビットかわかるようになってる。

/////////////////////////////////////////////////////

1.と2.を見比べて、なんだ1.でいいじゃんという感想はあるかも。

でも、もっと、手順が複雑化していった場合に、1.のソースでは
numがその場面で整数部が何bitか勘違いしてしまうということが起こりうる。

また、デバッグ時で止めて変数numの値をみたときに整数部が何bitか即座にはわからない。

 この例は実際に開発で経験したことがらをもとにしている。DCT変換の高速化でアセンブラコードを扱う場面だった。前任担当者からの説明は、「まえでNbitシフトアップしているので、あとでNbitシフトダウンすればいいんです~」というようなことだった。

その方式は、記憶力がないオレにとっては非常にわかりづらいし、つらい。

2.は変数のシンボルでその部分を解決した例。
num8からnum16へ値を代入するには
num16=num8>>8;だと
長大な前後のストーリーを読まなくても決定できる。

今回は変数名での対応だったが、変数型での対応も可。

/////////////////////////////////////////////////////

急に話は変わるが、つまり、
「次の次の電車に乗ってください」というのと
「11:20発の電車に乗ってください」というのと
どっちがまちがいがないかということ。


  • コメント (3)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/55600

コメント

そういえば思い出しました。
会社によって、表記が違うんですよね。

「先発」「次発」「次々発」
「こんど」「つぎ」「そのつぎ」
次の次は何番目の電車?

  • Posted by かっちゃん
  • at 2012/04/25 18:57:04

「こんど」が今度の電車で「つぎ」が「こんど」の次の電車ですね。わかりますw

  • Posted by いわいまさか
  • at 2012/04/25 19:17:29

そうだ、かっちゃんさん。パ:平行六等辺六角形360°/N を応用して何かできないか考えてるんですけど、いかがですか。非周期敷き詰めを強いるタイルのセットとか。

  • Posted by いわいまさか
  • at 2012/04/26 07:56:16