Bạn có thể lặp qua tất cả các giá trị có thể long
và sau đó sử dụng Double.longBitsToDouble()
để nhận được double
cho mỗi kết hợp 64 bit có thể.
Lưu ý rằng việc này sẽ mất một lúc. Nếu bạn yêu cầu 100 nano giây xử lý cho mỗi giá trị double
thì sẽ mất khoảng (không phải tất cả các kết hợp bit là các số kép khác nhau, ví dụ: NaN) 2^64 * 1e-7/86400/365 năm, nhiều hơn 16e11/86400/365 = 50700 năm trên một CPU. Trừ khi bạn có một trung tâm dữ liệu để thực hiện tính toán, tốt hơn là nên đi qua phạm vi có thể có của tất cả các giá trị đầu vào lấy mẫu khoảng thời gian tại một số điểm có thể cấu hình.
Điểm tương tự cho float
vẫn khó nhưng có thể thực hiện được: giả sử bạn cần 10 mili giây cho mỗi giá trị đầu vào bạn cần khoảng 2^32 * 1e-2/86400 = 497,1 ngày trên một CPU. Bạn sẽ sử dụng Float.intBitsToFloat()
trong trường hợp này.
Nguồn
2011-12-27 21:33:00
Vì bạn đã có thể lặp lại mọi int có thể, chỉ cần lặp lại tập hợp bao gồm mọi int có thể có/int. – asawyer
Tất nhiên bạn nhận ra rằng có quá nhiều cặp đôi khác biệt (hoặc dài trong trường hợp số nguyên) để thực sự thử tất cả. –
Trường hợp chính xác bạn cần phải thực hiện một khái niệm như vậy? – Lion