Hãy xem xét đoạn mã sau và nhận xét:Sự mâu thuẫn trong chia-by-zero hành vi giữa các loại giá trị khác nhau
Console.WriteLine(1/0); // will not compile, error: Division by constant zero
int i = 0;
Console.WriteLine(1/i); // compiles, runs, throws: DivideByZeroException
double d = 0;
Console.WriteLine(1/d); // compiles, runs, results in: Infinity
tôi có thể hiểu trình biên dịch tích cực kiểm tra cho phép chia cho không liên tục và DivideByZeroException khi chạy nhưng:
Tại sao phải sử dụng giá trị tăng gấp đôi theo từng số không, thay vì ném ngoại lệ? Đây có phải là do thiết kế hay là một lỗi?
Chỉ cần cho đá, tôi đã làm điều này trong VB.NET là tốt, với "phù hợp hơn" Kết quả:
dim d as double = 0.0
Console.WriteLine(1/d) ' compiles, runs, results in: Infinity
dim i as Integer = 0
Console.WriteLine(1/i) ' compiles, runs, results in: Infinity
Console.WriteLine(1/0) ' compiles, runs, results in: Infinity
EDIT:
Dựa trên phản hồi kekekela của tôi chạy sau đó dẫn trong vô cùng:
Console.WriteLine(1/
.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001);
Thử nghiệm này dường như chứng thực ý tưởng và một đôi chữ nghĩa là 0.0
thực sự là một phần rất, rất nhỏ mà sẽ dẫn đến vô cùng ...
Đây là bài viết của tôi về chủ đề: http://blogs.msdn.com/b/ericlippert/archive/2009/10/15/as-timeless-as-infinity.aspx –
@EricLippert cool! – Jalal