初日 最新 目次 MAIL HOME


*-- To Tell The Truth --*
Cruz
MAIL
HOME

My追加

2002年11月05日(火)
根っからのプログラマー

昨夜、かなーり遅くまでダンナの仕事を手伝う。

いや、手伝いというよりも、口はさみ。



Excelで作られている膨大な計算&データを処理するのに、時間がかかりすぎるため、簡単にCでプログラムが作れないかと相談される。
Excelの機能でやらせるには・・・ちと負荷がかかりすぎるようだった。

単純にできあがっているデータから収束計算だけできればいいのかと話を聞いてみると・・・・あっちのシートからこの値、んでこっちの値はこんな計算で・・・とかなりややこしい。

・・・時間ができたら作っておくよ。



ということにしておいた。


それにしても、この処理スピードでは埒が明かない。
マクロで処理をループさせているので、そこを見てほしいという。

マクロは・・・知らん。組んだことなし。


言語は知らなくてもアルゴリズムの検証くらいはできるので、とりあえず覗いてみると・・・。


無駄がある。
ループ終了条件が不明瞭
条件判断文がきちんと用を成していないかも・・・?

よく無限ループ地獄にならなかったなぁ。


処理スピードを上げたいのなら、

同じループなら1回だけにしよう。



計算するセルが違うとはいえ、上から下までデータをなめるのなら、その間に条件文で判断してすべての処理をすませてしまおう。
その方が早い。

ループbreak条件があるのなら使う。



上から下まで全部見終わる前に、『この条件にヒットしたら終了してよし』という条件があるのなら、それは必ず使う。

マクロの場合、breakってできないものか?
Cだとwhileでループしてて、終了条件がきたらbreakで抜け・・・ってするんだけどなぁ。
しょーがないから、GOTOで飛ばしたけど・・・。


条件判断は数値で。



文字列比較をさせるより、数値での==or!=(ってこれもCだけど)の方が早いです。
その方が、デバックで値チェックも楽だし。





この辺りを修正したら、最初の頃より倍以上のスピードアップが見込めました。

いろいろいじったおかげで、ちょっとC化のやる気が出ていたりして。


結局、プログラマーなのねぇ。ワタシって。