1

long のこの値を計算するのは簡単です。

これは単純に 2 の n-1 乗であり、マイナス 1 よりも小さいです。n は型のビット数です。長い間、これは 64 ビットとして定義されています。負の数も表す必要があるため、n の代わりに n-1 を使用します。0 を考慮する必要があるため、1 を減算します。したがって、最大値は次のようになります。

MAX = 2^(n-1)-1

double の場合の同等の思考プロセスは次のとおりです。

Double.MAX_VALUE

なる

1.7976931348623157E308
4

4 に答える 4

4

a の最大有限値doubleは、16 進形式0x1.fffffffffffffp1023、2 のすぐ下の数値 (16 進表記では 1.ff…) と 2 1023の積を表します。このように書くと、質問で可能な限り最大のものを構築する方法と非常によく似た方法で、可能な限り最大の仮数longと可能な最大の指数で構成されていることが簡単にわかります。


すべての数値が 10 進数表記で書かれている数式が必要な場合は、次のようになります。

Double.MAX_VALUE = (2 - 1/2 52 ) * 2 1023

Double.MAX_VALUEまたは、整数であることを明確にする数式を好む場合は、次のようにします。

Double.MAX_VALUE = 2 1024 - 2 971

于 2013-09-13T12:20:20.670 に答える
0

double (および float) は、IEEE 標準 754 に従って 2 進小数として内部的に表されるため、小数を正確に表すことはできません。

したがって、同等の計算はありません。

于 2013-09-13T12:20:46.790 に答える
0

Oracle が提供する表現を見ると、次のようになります。

0x1.fffffffffffffp1023

また

(2-2^-52)·2^1023

私たちはそれを見ることができます

fffffffffffff

は、2 進数 52 桁 ( 13 * 4 ) として表すことができる 13 桁の 16 進数です。

それぞれをそのまま 1 に設定すると ( F = 1111 )、小数部の最大値が得られます。

で定義されるように、小数部分は常に 52 ビットです。

http://en.wikipedia.org/wiki/Double-precision_floating-point_format

1ビットは符号用

残りの 11 ビットは指数を構成します。

指数は正と負の両方である必要があり、0 を表す必要があるため、次の最大値を持つことができます。

2^10 - 1

また

1023
于 2013-09-13T13:07:13.627 に答える