2004年05月26日
川俣晶の縁側技術関連執筆情報 total 3116 count

熱血VBプログラマ応援団 第5回 XML Webサービスに待ち構える暗黒面(前編)―― VB.NETで軽やかに乗り越えて光を目指せ! ――

Written By: 川俣 晶連絡先

 下記の記事が公開されました。

熱血VBプログラマ応援団 第5回 XML Webサービスに待ち構える暗黒面(前編)―― VB.NETで軽やかに乗り越えて光を目指せ! ――

 よく見たら下記記事の公開をここに書いていませんでしたね。

熱血VBプログラマ応援団 第4回 スマート・クライアントはVBプログラマのためにある ―― Webアプリケーションの弱点を克服した新技術をVB.NETで! ――

 それはさておき、今回の第5回 XML Webサービスに待ち構える暗黒面(前編)ですが、1箇所、「しまった!」と思う失敗があります。非常に基本的なところです。

 どこだか分かりますが?

 ちょっと考えてみてください。

答がすぐ見えないようにするために長い空間を確保 §

§

 答はそれは経過時間の表記です。

XML Webサービスを使った版 00:01:39.1144962

1つのプログラム内で完結する版 00:00:00.0100146

 というように書いてありますが、もちろん、表示された結果をCOP&PASTEした結果です。しかし、このように書くことは誤りなのです。

 それはなぜか?

 本来、工学系の人なら常識として問われることだと思います。分かっている人には簡単すぎると思いますが、知らない人も多いようなので、あえて書いてみます。

 分からない人は、考えてみてください。

もう一度、答がすぐ見えないようにするために長い空間を確保 §

有効桁数という問題 §

 ここに表示されている00:01:39.1144962のような値は、DateTime.Nowプロパティの差分ですが、このプロパティが提供する時刻の精度と、DateTime型が表現できる精度は異なります。この表示は、DateTime型の精度で文字列化した結果です。しかし、この値の全ての桁に意味はありません。

 Nowプロパティの仕様を調べると、以下のように書かれています。

Windows NT 3.5 以降 近似解像力 10 ミリ秒

 (ふと「近似解像力」って何だろうと疑問を持ちつつ、それは横に置いて進めると)

 ここで示されると通り、解像度が10ミリ秒だとすれば、10ミリ秒よりも小さな時間は計測できないことになります。つまり、10ミリ秒よりも下の桁は、意味を持たないのです。それらは、単なる計算上の都合で出現する数値に過ぎず、実際の時間を何ら反映していません。

 そのような意味のない数字を書くことは、誤った行為です。

 (ちなみに、数字のトリックで相手を騙す悪党の場合は、それを書くことによって達成することもあり得ます。その場合は、意味のない数字を書くことは正しい悪行です)

 つまり、もしこの原稿が学生時代のレポートなら、即刻再提出になるような重大なミステークだった、と言うわけです。(その上、「横に置いて進める」と書いた箇所もあるので、更に減点が付きますね)