3

私は SQL Server 2008 を使用しています。私の要件の 1 つは、母集団の標準偏差を計算することです。SQL Server にはstdevp、同じ組み込み関数が用意されています。私はそれを使用していますが、私が得ている結果に困惑しています。同じ数値のグループの母標準偏差はゼロになるはずですが、ここではわずかな値ではありますが、いくつかの異なる値が得られます。

drop table guest.tempTable;

create table guest.tempTable (column1 varchar , column2 decimal(10,6))

insert into guest.tempTable values('a',3578.2700);
insert into guest.tempTable values('a',3578.2700);
insert into guest.tempTable values('a',3578.2700);        
insert into guest.tempTable values('a',3578.2700);

insert into guest.tempTable values('a',3578.2700);
commit;

以下は stdevp クエリです。

select stdevp(column2) from guest.tempTable
group by column1

私が得る結果は

------------------------ 
5.459150335692846E-5

これは 0.00 である必要があります。

のドキュメントにstdevpは、フロートを返すと書かれています。したがって、これは丸めの問題であるに違いないと推測していますが、解決策を見つけることができません。

4

1 に答える 1

1

浮動小数点数は 100% 正確ではありません。

浮動小数点数がすべての実数を正確に表すことができず、浮動小数点演算が真の算術演算を正確に表すことができないという事実は、多くの驚くべき状況につながります。これは、コンピューターが数値を表現する一般的な有限精度に関連しています。

たとえば、0.1 と 0.01 (バイナリ) の非表現可能性は、0.1 を 2 乗しようとした結果が 0.01 でもそれに最も近い表現可能数でもないことを意味します。24 ビット (単精度) 表現では、以前は 0.1 (10 進数) が e = −4 として与えられていました。s = 110011001100110011001101、つまり

0.100000001490116119384765625 exactly.

この数を二乗すると

0.010000000298023226097399174250313080847263336181640625 exactly.

単精度浮動小数点ハードウェア (丸めあり) で 2 乗すると、次のようになります。

0.010000000707805156707763671875 exactly.

しかし、0.01 に最も近い表現可能な数は

0.009999999776482582092285156250 exactly.

あなたはそれについて読むことができますHERE .

于 2012-01-17T09:31:31.390 に答える