6

昼休みに、double値型の精度について議論を始めました。

私の同僚は、小数点以下は常に 15 桁だと考えています。

1私の意見では、IEEE 754 はこれについて仮定を行っておらず、バイナリ表現の最初の位置に依存するため、わかりません。(つまり、小数点の前の数値のサイズもカウントされます)

どうすればより適切なステートメントを作成できますか?

4

4 に答える 4

3

C# リファレンスで述べられているように、精度は小数点の前後で 15 ~ 16 桁です (表される 10 進数値によって異なります)。

要するに、あなたは正しいです、それは小数点の前後の値に依存します

例えば:

  • 12345678.1234567D//右隣の桁は切り上げ
  • 1234567.12345678D//右隣の桁は切り上げ

完全なサンプル: http://ideone.com/eXvz3

また、値を固定小数点値として考えようとするdoubleのは得策ではありません。

于 2012-08-23T10:48:35.750 に答える
3

あなたは両方とも間違っています。法線の精度doubleは 53ビットです。これはおおよそ 10 進数の 16 桁に相当しますが、double値を小数であるかのように考えることは混乱を招くので、避けるのが最善です。

とはいえ、あなたは同僚よりもはるかに正確です。精度は、表現されている値に関連しています。十分に大きなdoubles には、小数桁の精度がありません。

たとえば、 より大きい次の double4503599627370496.0は です4503599627370497.0

于 2012-08-23T11:09:21.563 に答える
0

C# double は IEEE 754 に従って、53 ビット仮数p (または仮数) と 11 ビット指数eで表され、-1022 ~ 1023 の範囲になります。したがって、それらの値は次のようになります。

p * 2^e

仮数は常に小数点の前に 1 桁あるため、小数部分の精度は固定されています。一方、double の小数点以下の桁数は、その指数にも依存します。指数が仮数の小数部の桁数を超える数には、小数部自体がありません。

すべてのコンピュータ科学者が浮動小数点演算について知っておくべきことは、おそらくこの主題に関する最も広く認知されている出版物です。

于 2012-08-23T10:57:20.860 に答える