*-- To Tell The Truth --*
Cruz
MAIL
HOME
|
|
2002年11月05日(火) ■ |
|
根っからのプログラマー |
|
昨夜、かなーり遅くまでダンナの仕事を手伝う。
いや、手伝いというよりも、口はさみ。
Excelで作られている膨大な計算&データを処理するのに、時間がかかりすぎるため、簡単にCでプログラムが作れないかと相談される。 Excelの機能でやらせるには・・・ちと負荷がかかりすぎるようだった。
単純にできあがっているデータから収束計算だけできればいいのかと話を聞いてみると・・・・あっちのシートからこの値、んでこっちの値はこんな計算で・・・とかなりややこしい。
・・・時間ができたら作っておくよ。
ということにしておいた。
それにしても、この処理スピードでは埒が明かない。 マクロで処理をループさせているので、そこを見てほしいという。
マクロは・・・知らん。組んだことなし。
言語は知らなくてもアルゴリズムの検証くらいはできるので、とりあえず覗いてみると・・・。
無駄がある。 ループ終了条件が不明瞭 条件判断文がきちんと用を成していないかも・・・?
よく無限ループ地獄にならなかったなぁ。
処理スピードを上げたいのなら、
同じループなら1回だけにしよう。
計算するセルが違うとはいえ、上から下までデータをなめるのなら、その間に条件文で判断してすべての処理をすませてしまおう。 その方が早い。
ループbreak条件があるのなら使う。
上から下まで全部見終わる前に、『この条件にヒットしたら終了してよし』という条件があるのなら、それは必ず使う。
マクロの場合、breakってできないものか? Cだとwhileでループしてて、終了条件がきたらbreakで抜け・・・ってするんだけどなぁ。 しょーがないから、GOTOで飛ばしたけど・・・。
条件判断は数値で。
文字列比較をさせるより、数値での==or!=(ってこれもCだけど)の方が早いです。 その方が、デバックで値チェックも楽だし。
この辺りを修正したら、最初の頃より倍以上のスピードアップが見込めました。
いろいろいじったおかげで、ちょっとC化のやる気が出ていたりして。
結局、プログラマーなのねぇ。ワタシって。
|
|