パスワードを忘れた? アカウント作成
451942 journal

Endowsの日記: Endows の へっぽこプログラマ日誌 第3回 2

日記 by Endows
ちょっと友人に指摘されたことがあってテストプログラムを書いてみた。まあ、本で調べてもいいんだけど、実際にテストする方が手っ取り早かったので。

ソースコードは以下の通り。

#include<stdio.h>

#define TEST1 (8/3)
#define TEST2 (8./3.)

        int main(int argc, char *argv[]){

        double ans1, ans2;

        ans1=TEST1;
        ans2=TEST2;

        printf("%E,%E\n",ans1,ans2);

        return 0;
}

んでコンパイル、実行してみると、出力は次のようになりました。

2.000000E+00,2.666667E+00

ということで、あいかわらずのへっぽこぶりを発揮した一件でした。

(上のテストプログラムと実行結果を見れば、何をミスったかは分かりますよね?)
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • もう一つ指摘を(笑
    この前の指摘は、(8/3) = 2になることは自明なのでさておいて、(8/3)*10.5のような場合、うっかり8/3の結果も自動型上げされると思い込んでしまうけどそれは間違い、といったものだったんだけど…
    は、=の左右で型調整を期待してしまうのか?
    /* ま、どちらにせよ間違いだけど。
    話題がCなので、Cスタイルのコメントで。 */

    というわけで、へっぽこがここにももう一人…
    --
    巧妙に潜伏したバグは心霊現象と区別が付かない。
    • (8/3)*10.5のような場合、うっかり8/3の結果も自動型上げされると思い込んでしまうけどそれは間違い、といったものだったんだけど…

      あ、そうか。そういえばその辺も勘違いの原因になっていたのか。(って、自分が気づいていなくてどうする)

      今回の教訓は『式全体で型上げしてくれるわけではない』ということで OK ですかね?

      というわけで、レポートも一部修正しなければなりませんでした。まだ締切が十分先だったのが救いかな…?

      親コメント
typodupeerror

身近な人の偉大さは半減する -- あるアレゲ人

読み込み中...