Đây cũng là một câu hỏi khá hay khi chúng ta lập trình với Java.Cũng như đi phỏng vấn cũng có thể gặp. Vậy Vì sao phép tính chia cho một số 0.0 không xảy ra ngoại lệ trong Java ???

Vì sao phép tính chia cho một số 0.0 không xảy ra ngoại lệ trong Java

Cùng nhìn vào một ví dụ bên dưới khi chia mẫu số với một số nguyên bằng 0 nhé :

Với đoạn code trên, chương trình của chúng ta sẽ xảy ra ngoại lệ vì mẫu số = 0. Cùng nhìn vào quy trình chạy code của hình bên dưới:

Vì sao phép tính chia cho một số 0.0 không xảy ra ngoại lệ trong Java (2)

Kết quả:

Vì sao phép tính chia cho một số 0.0 không xảy ra ngoại lệ trong Java (2)

Bây giờ cùng xem chương trình thứ 2 với phép toán chia một số = 0 kiểu số thực (float,double):

Kết quả : Infinity

Vậy vì sao khi chia mẫu số với một số thực (float,double) bằng 0 trong Java lại không xảy ra ngoại lệ và  có thể chia được??? Mời bạn đọc trả lời ở phần comment bên dưới.

Trả lời : 

Hãy tưởng tượng một con số vô cùng gần bằng không.Biến sẽ tiếp cận số không cho một khoảng cách bằng 0 nhưng không bao giờ là chính xác.Giả sử số đó cần chính xác cho Java để đại diện lấy số đó để chia, nó cho lên và làm tròn thành 0.0 bởi vì không có một lựa chọn tốt.
Bất kỳ số nào thường chia cho một số cực nhỏ thành số không là về cơ bản, vô hạn (+-Infinity) . Hãy thử : 10 / (10^-100) = 0.0.
IT Phú Trần

Xin chào! Tôi là Phú Trần.Kiến thức nền tảng và tư duy tốt về hướng đối tượng. Không ràng buộc ở ngôn ngữ mà căn bản ở giải thuật và tư duy con người. Lập trình JAVA/PHP.

1 Comments

  1. Trinh Quang

    Theo anh thì câu trả lời này có được chấp nhận hay không nhỉ?
    Lập trình cũng tuân theo các quy tắc của toán học, ở đây là trường hợp chia cho 0. Trong toán học sẽ nhận được giá trị là vô cùng.
    Khi dùng int, long chia cho 0 sẽ không thể trả về kết quả mà báo lỗi là vì int và long không có một giá trị nào có thể đại diện cho vô cùng. Int và long đều có những giá trị xách định nằm trong 1 khoảng nào đó, ví dụ như int là từ -2 tỷ 147.. để + 2 tỷ 147..
    Còn khi dùng float, double thì sẽ có kết quả là infinity là vì float và double chỉ có giá trị mặc định là 0.0f và 0.od, mà không xách định khoảng giá trị lưu trữ cụ thể nào cả, có thể hiểu là bao nhiêu cũng được vì vậy mà nó có chứa giá trị vô cùng tức infinity vậy nên jvm sẽ hiển thị kết quả mà nó tìm thấy trong float hay double để trả về ta.

Post Comment