先週末にやってもらった計測器の評価実験の結果報告を月曜に聞いていた。それによると開発中の計測器で得られる値は、実験条件からの予測や他の計測器で計測した値に比べて10分の1ほど小さいらしい。
 この計測器は、センサからの出力をそのまま結果にするのではなく、途中で単純な計算で目的の物理量に換算した値を計測結果とする。どうもその換算に間違いが残っているらしい。
 幸い今の時点での実験の目的は定性的な特性のチェックで数値の大きさ自体はさほど重要ではないので、計算間違いの再チェックをしばらく待ってもらっていた。
 今日ようやくコードを再チェックする時間がとれたので、もう一度計算に使う物理定数を再チェックした。計算式そのものは簡単なのだけど、ナノやマイクロといった桁の小さな数値をいくつも使うので、桁を合わせるときに間違えている可能性が高い。そういう推測で計算式をチェックすると、あにはからんや、キログラムとグラムの換算を忘れていた箇所が1つ見つかった。
 ただ、この間違いは結果を1000倍もしくは1/1000倍するはずで、10倍になるのはおかしい。とは言え他に間違いも見あたらない。テストコードを書いて検証しても異常は見つからない。計算式自体も他の資料を参考によりシンプルに変更した。実質的にはこれまでのものと同じ式なのだけど、計算段階の分け方や単位系の取り方が違っていて見た目がより単純になっている。
 代表的な入力値と結果のペアを使って計算の正しさをチェックするテストコードも書いて間違いが無いことを検証した(まあ最初っからテストコードくらい書いとけって話だが)。
 これ以上は実際に計測してみないとチェックするのが難しいので、実験担当者にその旨を伝えてひとまず引き渡した。引き渡してすぐに実験担当者が動作を確認してくれた。それによると今度は約100倍大きな値が出たとのこと。もともと真の値の10分の1だったものをさっきの修正で1000倍にしたので100倍になるのは当然と言えば当然ではある。
 当然ではあるが、結果が正しくない以上でなんとか直さないといけない。
 こういうときは生の情報を見るに限る。実験担当者から実データをもらってしばしじっくり眺めてみて、ようやく原因を突き止めた。計算に使うある値が、本当ならおよそ10.5であるはずが、初期化のミスで1000になっていた。これによって計算結果がおよそ1000/10.5=100倍になっていたわけだ。
 約100倍の違いで、しかもミリとかキロとかマイクロとかが混ざった数値を扱っているせいでてっきり桁の変換を2桁間違っているのだと思い込んでいた。そのせいで計算間違いを探していたため、発見に時間を食ってしまった。先入観を持たずにもっと早く実データを見るべきだった。反省。