計算結果の検算でのちょっとした罠

計算機

日出ずる処は黄金週間にて,そちらからの仕事関係のメールが激減しております.なんか悔しいので,仕事の話題を長めに書きます.

ちょっと面倒な計算をコンピュータにやらせていました.頼りになる彼,どんな問題でも瞬く間に解いてくれます.間違った問題なら,間違った答を正しく計算してくれるお茶目なやつです.

どこが間違っているのか.コンピュータが吐き出す結果が全くトンチンカンなものなら,どっかおかしいと直感できます.例えばコンピュータシミュレーションで天気予報したとき,夏日なのに「明日は雪になるでしょう」と教えてくれれば,そりゃどっかおかしいと思う訳です.

でも結果が微妙に違っている場合,それに気づかないか,あるいは間違を見つけ出すのが難しい.

コンピュータの計算結果を検算する簡単な方法は,結果が初めから分かっている問題を解かせることです.100になるはずなのに計算結果が50なら二倍するのを忘れてるかも.結果が3倍違えば,円周率を掛けるのを忘れているかも.

そんな検算をやっていた時のこと.結果は1.4になる筈なのに,僕のコンピュータ君,答は0.7だと主張します.プログラムを徹底的に洗いなおしたのに,間違いらしき箇所は見つかりません.

こんな場合は,French Factorを導入します.

フランス因子とは? 何だかよく分からないけど,結果をこんだけ倍しておけば,何故か結果が正しくなるという魔法の数.国によっては,ブルガリア係数やハンガリー係数と呼ばれることもあります.まあ「なんかいい加減な」ってことを代表しているわけ.幸い,Japan Factorというのは聞きません.

French Factorは冗談ですが,他人が書いたプログラムでホントに見たことがあるんです.正体不明な数値が結果に掛け算されていて,コメントに「よく分からないけど,こうすると結果が正しくなる」としっかり書いてあったのを(コメントに書いてあるだけマシ).

さて計算結果が二倍足りない事件の顛末.どこかに係数2を忘れてるんだと,そればかりを探していのですが,原因は全く別にありました.

なんと逆数を書き出していたんです.1/0.7 = 1.4.欲しい結果が√2(ヒトヨヒトヨニヒトミゴロ)だったところ,たまたまその逆数を計算してしまい,さらにたまたま逆数にすると半分になる (1/√2 = √2/2) という特殊な数だったわけ.

FacebooktwittertumblrmailFacebooktwittertumblrmail

10 thoughts on “計算結果の検算でのちょっとした罠”

  1. ご無沙汰しております!

    えーと、えーと、先生!わかりません!

    私って何て正直なんでしょう♪

    1. TOMOSさん,ちゃんと分かるように,明日から10回に分けてシリーズで説明しましょう!
      私ってなんて親切なんでしょう.

  2. フレンチファクタというのですね.そういうのがまだ残ったコードをくれる人のがいるとは...

    1. Sanndaruさん,しばしば謎のnormalization factorというのもコードに出現しますね.
      あと,単位間違ってるのとかもありました.

  3. 知ってますよ、それくらい。
    ジャン・レノもそうですよね。
    ん?それじゃー、Fが1個足りないって?

  4. 小学生の頃そろばんを習っていて暗算が大変良くできた幼少をすごした私。
    でも今じゃ数字にめっちゃ弱いあほぅ~です。

    1. Joniさん,すごいじゃないですか.そろばん少女.そういうのは,大人になっても忘れないもんですよ.

コメントは停止中です。