2005/10/04
数値を四捨五入するプログラムを作らせた。
出てきたコードは、これだ。
-----
# パラメータを設定
$bval = 1.4567;
$mag = 100.0;
# 四捨五入を実行。
$bval *= $mag;
$nval = int($bval);
$pval = $bval - $nval;
$pval *= 10;
if ($pval >= 5)
{
$nval += 1;
}
$bval = $nval / $mag;
# 結果を表示
print "${bval}\n";
-----
残難ながら、ずんべの脳ミソではこのコードを理解する事ができない。
それ以前に、このコードが正しいかどうか検証する気になれない。
どうしてこんな複雑なコードが必要なのだろうか。
四捨五入の基本となるコードはこれだけである。
これに、丸める桁の処理と、負の値の対応を付加すれば、四捨五入のコードはできあがる。
-----
$bval = int($bval + 0.5);
-----
おそらく、社員が作成したコードは、検索エンジンで探して、どこかのサイトから拾ってきたコードであろうが、プログラマたるもの四捨五入程度のコードは調べるまでもなく頭の中に入っているべきだ。
どう考えても、こんな複雑なコードは必要ない。
投稿者 zunbe : 2005/10/04 01:40:02
トラックバック
|
〔http://blog.zunbe.com/mt/mt-tb.cgi/26〕
|
プログラムにおいてこういうのは数学の公式と同じですね。(^^;
他にはソートアルゴリズムとかも。
投稿者 NOBU! : 2005/10/04 10:10:48
そうそう、プログラマたるもの、この程度のものはそらで書けないといけません。
それに、プログラムをどこから拾って来たにしろ、それをよき観察して、検証して、理解してから使うべきだ。
たとえば、このコードの肝の部分。
-----
$nval = int($bval);
$pval = $bval - $nval;
$pval *= 10;
if ($pval >= 5)
{
$nval += 1;
}
-----
小数点以下を取り出し、10倍し、「5以上か?」と確認している。
まず、10倍という処理がムダである事は明白である。
当然、こうなる
-----
$nval = int($bval);
$pval = $bval - $nval;
if ($pval >= 0.5)
{
$nval += 1;
}
-----
変数 $pval は、0.5 以上か未満かを調べたいだけのワーク変数であるので、この変数への代入もムダ。
-----
$nval = int($bval);
if (($bval - $nval) >= 0.5)
{
$nval += 1;
}
-----
この程度まで最適化して使うんだったら、まだ許せる。
しかし、ネットで拾ってきたものを、何の検証もせず、何の確認もせず、何の最適化もせず、何ら内容を理解せずに使おうとする、その考え方が、どうにもずんべは気にいらんのですよ。
投稿者 ずんべ : 2005/10/04 10:36:43
|