Tôi gặp sự cố khi phát hiện xem tổng/nhân của hai số có vượt quá giá trị lớn nhất của số nguyên dài hay không. đang
Ví dụ:số java vượt quá long.max_value - cách phát hiện?
long a = 2 * Long.MAX_VALUE;
System.out.println("long.max * smth > long.max... or is it? a=" + a);
này mang lại cho tôi -2
, trong khi tôi mong chờ nó để ném một NumberFormatException
...
Có một cách đơn giản để làm công việc này? Bởi vì tôi có một số mã mà nhân trong các khối IF lồng nhau hoặc bổ sung trong một vòng lặp và tôi sẽ ghét thêm nhiều IFs cho mỗi IF hoặc bên trong vòng lặp.
Chỉnh sửa: oh well, có vẻ như câu trả lời này từ một câu hỏi khác là thích hợp nhất cho những gì tôi cần: https://stackoverflow.com/a/9057367/540394
Tôi không muốn làm boxing/unboxing vì nó thêm overhead unnecassary, và cách này là rất ngắn, đó là một điểm cộng lớn đối với tôi. Tôi sẽ chỉ viết hai hàm ngắn để thực hiện các kiểm tra này và trả lại số phút tối thiểu hoặc cực đại.
Edit2: đây là chức năng để hạn chế một chặng đường dài để min/giá trị tối đa của nó theo câu trả lời tôi liên kết với trên:
/**
* @param a : one of the two numbers added/multiplied
* @param b : the other of the two numbers
* @param c : the result of the addition/multiplication
* @return the minimum or maximum value of a long integer if addition/multiplication of a and b is less than Long.MIN_VALUE or more than Long.MAX_VALUE
*/
public static long limitLong(long a, long b, long c)
{
return (((a > 0) && (b > 0) && (c <= 0))
? Long.MAX_VALUE
: (((a < 0) && (b < 0) && (c >= 0)) ? Long.MIN_VALUE : c));
}
Nói cho tôi biết nếu bạn nghĩ rằng đây là sai.
+1. Nên có một số thư viện cho phép phát hiện tràn số nguyên. – Thilo
Hoặc các khối đặc biệt (giống như cuối cùng?) Có thể giúp các nhà phát triển kích hoạt hành vi lỗi tràn trên cho tất cả các mã toán thực thi bên trong. Tôi tin rằng C# có một. EDIT: Tìm thấy nó, [kiểm tra và bỏ chọn các khối trong C#] (http://msdn.microsoft.com/en-us/library/a569z7k8.aspx). –
Vâng, C# dường như ném lỗi trên tràn (mà tôi muốn rất nhiều thích hơn im lặng và kết quả sai mà không có ý nghĩa với tôi) ... – jurchiks