Coding for Fun

ruby on railsを中心としたウェブ技術つれづれ日記

先週一週間の生産量=コード一行

先週一週間の私の仕事をgit diffで:

-    tol = 1e-12;
+    tol = 1e-16;


Matlabで書いた割と複雑なシミュレーションのコードが、ときどきあり得ない値を出すことを発見しました。大量に近似解とか局所最適化とか使っているので、疑わしいことばかりです。

バグハンティングを一週間本気で、残業して、土日返上でやって、やっと判明。最適化の収束判定条件が1e-12(=0.0000000001)では甘くて、1e-16(=0.0000000000000001)でなくてはならなかったようです。

近似の有効数字がたかだか10桁くらいかと思って油断しました。たぶん入力によっては一五桁くらいまで行くんでしょう。私のシミュレーション繊細すぎだって。

今日の反省ポイント(というか願望)

  • 有効数字の安全マージンは多めに取るべき。遅くなるけど、一週間デバッグするよりまし。
  • Matlabでもテストたくさん書くべき。Rspec的なものがあればいいのに。ていうかRubyが恋しい。遅いから使うのは無理だけど。