2004年2月12日
『SQL Server float 型と 、.NET Framework の Double 構造体について』
システム管理 ML での話題を紹介します。
・tempdbの使用頻度を知りたい
現時点で ML のメンバーでなくても、
http://www.sqlpassj.org/bbs/ml_disp.aspx?forum_id=3
より閲覧可能です。
なかなか予定を決められなかったのですが、 PASSJ Conference 2004 出席できることになりました。
会員の皆さんと交流できるのを楽しみにしています。
[pml-web,00197] オプティミスティック向け記述と疑問点Re: 感想 2004年1月29日 『どっとねっとと雑多な日々
20』で発言したのですが、SQL Server float 型と、.NET Framework の Double 構造体に微妙な差があり、結構はまっています。
関係する 型をまとめると
・SQL Server の float 型
- 1.79E + 308 through -2.23E - 308,
0 and 2.23E -308 through 1.79E +308
・System.Double 構造体
-1.79769313486232e308 から +1.79769313486232e308 までの倍精度 64 ビット数値
Double.Epsilon 4.94065645841247e-324
(0 より大きい最小の Double)
Epsilon は 1 より大きい最小か、問題ごとに指定のほうがなじみがあります。
また、使用法のイメージがつかめない定数でした。
・System.Data.SqlTypes の SqlDouble 構造体
-1.79E +308 から 1.79E +308 の範囲内の浮動小数点
.Epsilon は存在しない。
Double.Epsilon を代入可能。
C# 言語の仕様
4.1.6 浮動小数点型
を参照すると
.NET Framework では、正規化されない浮動小数点数も有効な非ゼロ値としていて、SQL Server の値の範囲との差になっています。
(Double.Epsilon は SQL Server の有効な値から外れていました)
さまざまな言語をカバーできるように、ハードウエアの限界を削らない決め方なのかもしれません。
|