nativist.bill.cutting
nativist.bill.cutting

Reputation: 1382

Calculate the maximum value of a Java Double (5)?

Calculating this value for an long is easy:

It is simply 2 to the power of n-1, and than minus 1. n is the number of bits in the type. For a long this is defined as 64 bits. Because we must use represent negative numbers as well, we use n-1 instead of n. Because 0 must be accounted for, we subtract 1. So the maximum value is:

MAX = 2^(n-1)-1

what it the equivalent thought process, for a double:

Double.MAX_VALUE

comes to be

1.7976931348623157E308

Upvotes: 1

Views: 5232

Answers (4)

If we look at the representation provided by Oracle:

0x1.fffffffffffffp1023

or

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

We can see that

fffffffffffff

is 13 hexadecimal digits that can be represented as 52 binary digits ( 13 * 4 ).

If each is set to 1 as it is ( F = 1111 ), we obtain the maximum fractional part.

The fractional part is always 52 bits as defined by

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

1 bit is for sign

and the remaining 11 bits make up the exponent.

Because the exponent must be both positive and negative and it must represent 0, it to can have a maximum value of:

2^10 - 1

or

1023

Upvotes: 0

Pascal Cuoq
Pascal Cuoq

Reputation: 80266

The maximum finite value for a double is, in hexadecimal format, 0x1.fffffffffffffp1023, representing the product of a number just below 2 (1.ff… in hexadecimal notation) by 21023. When written this way, is is easy to see that it is made of the largest possible significand and the largest possible exponent, in a way very similar to the way you build the largest possible long in your question.


If you want a formula where all numbers are written in the decimal notation, here is one:

Double.MAX_VALUE = (2 - 1/252) * 21023

Or if you prefer a formula that makes it clear that Double.MAX_VALUE is an integer:

Double.MAX_VALUE = 21024 - 2971

Upvotes: 4

aUserHimself
aUserHimself

Reputation: 1597

Just take a look at the documentation. Basically, the MAX_VALUE computation for Double uses a different formula because of the finite number of real numbers that can be represented on 64 bits. For an extensive justification, you can consult this article about data representation.

Upvotes: 0

Dan
Dan

Reputation: 635

Doubles (and floats) are represented internally as binary fractions according to the IEEE standard 754 and can therefore not represent decimal fractions exactly:

So there is no equivalent calculation.

Upvotes: 0

Related Questions