52

Double.MIN_NORMAL(Java 1.6 で導入) との違いは何Double.MIN_VALUEですか?

4

3 に答える 3

33

答えは、浮動小数点表現の IEEE 仕様にあります。

単一形式の場合、正規数と非正規数の違いは、正規数の仮数の先頭ビット (2 進小数点の左側のビット) が 1 であるのに対し、非正規数の仮数の先頭ビットは 1 であることです。 number は 0 です。単一形式の非正規数は、IEEE 標準 754 では単一形式の非正規化数と呼ばれていました。

つまり、Double.MIN_NORMAL2 進小数点 (10 進法で小数点と呼ばれるもの) の前に 1 がある場合に、表現できる最小の数です。WhileDouble.MIN_VALUEは基本的に、この制約なしで表現できる最小の数です。

于 2010-09-16T15:46:48.150 に答える
14

IEEE-754 binary64 形式:

s_eee_eeee_eeee_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm_mmmm

(1 s; 3×4−1 =11e秒; 64−3×4 =52m秒)

、およびそのアルゴリズム:

  • e >000_0000_0000との場合: s ×2 e−bala​​ncer:1023 × base:1 +m×2 −sub-one-pusher:52<111_1111_1111と解釈します。(これらは通常の数値です。)(-1)()

  • If : isとise =000_0000_0000を除いて (上記の行と同じ) を実行します。(これらは、非正規/正規ではないゼロを除いて、非正規数です。)base:1base:0ee +1

  • e =111_1111_1111およびの場合: s × 無限大m =0000...0000として解釈します。(-1)

  • e =111_1111_1111およびm <>0000...0000: NaN として解釈します。(ちなみに: したがって、NaN には 2× (2 52 −1)の異なるビット表現があります。 #Quiet NaN &を参照してくださいdoubleToRawLongBits。)

したがって:


付録:

MIN_VALUE計算:

         (-1) s:0 ×2 (e:0+1)−バランサー:1023 ×(ベース:0 +m:1 ×2 −サブワンプッシャー:52 )

      = 1 ×2 −1022 ×2 −52

      = 2 −1074 ( ~4.94 × 10 −324 )

、およびMIN_NORMAL計算:

         (-1) s:0 ×2 e:1 −バランサー:1023 ×(ベース:1 +m:0 ×2 −サブワンプッシャー:52 )

      = 1 ×2 −1022 ×1

      = 2 −1022 ( ~2.225 × 10 −308 )

于 2014-08-22T01:01:56.530 に答える
3

簡単にするために、説明は正の数だけを考慮します。

2 つの隣接する正規化された浮動小数点数'x1' と 'x2' の間の最大間隔は です2 * epsilon * x1(正規化された浮動小数点数は等間隔ではなく、対数間隔になっています)。つまり、実数(つまり、「数学的な」数) が浮動小数点数に丸められる場合、最大相対誤差はであり、これはマシン イプシロンまたは単位の丸めepsilonと呼ばれる定数であり、倍精度の場合、値は 2 になります。 ^-52 (近似値 2.22e-16)。

より小さい浮動小数点数Double.MIN_NORMALはサブノーマルと呼ばれ、0 と の間のギャップを均等に埋めていDouble.MIN_NORMALます。つまり、サブノーマルを含む計算では、結果の精度が低下する可能性があります。サブノーマルを使用すると、結果が小さい場合に計算の精度が低下する速度が遅くなります。

于 2014-04-06T11:23:15.050 に答える