2012-03-16 77 views
13

Sự khác biệt giữa Float.POSITIVE_INFINITYFloat.MAX_VALUE là gì? Giá nào lớn hơn? Chúng có giống nhau không?Sự khác nhau giữa Float.POSITIVE_INFINITY và Float.MAX_VALUE là gì?

Tôi đã vô tình tìm kiếm một giá trị lớn hơn mọi giá trị khác float hoặc không thực hiện tất cả ngoại trừ giá trị lớn nhất. Có đáp ứng các tiêu chí đó không?

Cảm ơn!

Trả lời

18

Không, chúng hoàn toàn không giống nhau.

Float.MAX_VALUE là lớn nhất hữu hạn giá trị có thể được thể hiện trong một float. Bạn sẽ không tìm thấy bất kỳ giá trị nào lớn hơn giá trị đó, ngoại trừ vô cùng. Nhưng bạn có thể thực hiện tất cả các loại hoạt động khác trên đó.

Float.POSITIVE_INFINITY là, tốt, vô cùng. Hầu hết các hoạt động liên quan đến vô cực sẽ kết thúc với vô cùng (dương hoặc âm).

Ví dụ:

public class Test { 
    public static void main(String[] args) { 
     testOperations(Float.MAX_VALUE); 
     testOperations(Float.POSITIVE_INFINITY); 
    } 

    public static void testOperations(float input) { 
     System.out.println("input: " + input); 
     System.out.println("input/100: " + input/100); 
     System.out.println("input * 100: " + input * 100); 
     System.out.println("-input: " + (-input)); 
     System.out.println(); 
    } 
} 

Output:

input: 3.4028235E38 
input/100: 3.4028236E36 
input * 100: Infinity 
-input: -3.4028235E38 

input: Infinity 
input/100: Infinity 
input * 100: Infinity 
-input: -Infinity 
+0

Vì vậy, khi so sánh với bất kỳ Float nào khác, Float.POSITIVE_INFINITY sẽ luôn lớn hơn? – Adam

+2

@Adam: Trừ khi float khác là 'NaN', vâng. ('NaN' không lớn hơn hoặc cũng không nhỏ hơn hoặc không bằng bất kỳ phao nào.) –

+0

Hoàn hảo. Cảm ơn! – Adam

3

Để trả lời câu hỏi cụ thể của bạn:

Tôi đi ngang qua họ tìm kiếm một giá trị sẽ lớn hơn mỗi phao khác hoặc thất bại mà tất cả ngoại trừ lớn nhất. Có phải đáp ứng các tiêu chí đó không?

Vâng, Float.POSITIVE_INFINITY là, theo định nghĩa của nó, chỉ Float đó là lớn hơn Float.MAX_VALUE. Đó là, tuy nhiên, một cái gì đó của một trường hợp đặc biệt về cách nó tương tác với các hoạt động toán học.

Từ javadoc:

public static final float POSITIVE_INFINITY:

Một hằng giữ dương vô cực kiểu float. Giá trị này bằng giá trị được trả về bởi Float.intBitsToFloat (0x7f800000).

public static final float MAX_VALUE:

Một hằng giữ giá trị lớn nhất dương tính hữu hạn của kiểu float, (2-2-23) · 2127. Nó bằng với dấu phẩy động thập lục phân theo chiều ngang 0x1.fffffeP + 127f và cũng bằng Float.intBitsToFloat (0x7f7fffff).

Vì vậy, như bạn có thể thấy, theo định nghĩa rất có nghĩa là POSITIVE_INFINITY lớn hơn MAX_VALUE một chút.

Về tiện ích của chúng, POSITIVE_INFINITY cung cấp giá trị mà bạn có thể sử dụng để nhận dạng các biểu thức toán học có vấn đề khác. Giá trị được sử dụng trong nguồn JDK là 1.0f/0.0f. Kết quả của biểu thức này là POSITIVE_INFINITY, cho biết rằng bạn đã vượt quá giới hạn trên của toán học hợp lý, không bao giờ quay trở lại. Với hai hằng số POSITIVE_INFINITYNEGATIVE_INFINITY, bạn có thể kiểm tra xem một biểu thức chung có để lại các giới hạn của các Floats hữu dụng hay không và liệu đó có phải là cửa dương hay âm. Mặt khác,

MAX_VALUE đại diện cho giá trị tối đa mà bạn vẫn có thể áp dụng các phép toán thông thường. Ví dụ: MAX_VALUE - 1.0f là số (nhỏ hơn) nhỏ hơn MAX_VALUE. Tuy nhiên, POSITIVE_INFINITY - 1.0f vẫn là POSITIVE_INFINITY.

Các vấn đề liên quan