CodeGym /Blog Java /Ngẫu nhiên /Từ khóa nổi Java

Từ khóa nổi Java

Xuất bản trong nhóm
Tại một thời điểm nào đó trong quá trình phát triển của công nghệ máy tính, rõ ràng là các bộ xử lý trung tâm cần có thiết bị phần cứng để xử lý số dấu phẩy động. Ngày nay, mọi kiến ​​trúc máy tính đều có thể hoạt động hiệu quả với những con số như vậy. Tất nhiên, trong các ngôn ngữ lập trình, bạn cũng không thể thiếu những kiểu dữ liệu tương ứng. Có hai kiểu dữ liệu dấu phẩy động trong Java: float và double. Từ khóa Java Float xác định một số thực chiếm 32 bit trong bộ nhớ. Chúng ta sẽ nói về những con số như vậy trong bài viết này.

Số dấu phẩy động. Số thực được lưu trữ trong máy tính như thế nào?

Để lưu trữ số thực trong bộ nhớ máy tính, một số bit nhất định được phân bổ. Một số thực được lưu trữ dưới dạng dấu (cộng hoặc trừ), bọ ngựa và số mũ. Phần định trị và số mũ được giải thích rõ nhất bằng một ví dụ. Khối lượng gần đúng của mặt trăng là 7* 1022. Ở đây 7 là bọ ngựa, trong 22 là số mũ. Khi hiển thị số lớn hoặc ngược lại, số rất nhỏ trên màn hình, bạn có thể thấy một mục như 7E22. Đây là số dấu phẩy động, 7 ở đây là bọ ngựa và 22 là số mũ hoặc lũy thừa của 10. Ký hiệu này được gọi là ký hiệu số mũ.

Từ khóa Java float và Từ khóa đôi Java

Các giá trị float (số dấu phẩy động hoặc số thực) trong Java được biểu thị bằng các kiểu floatdouble . Chính những từ khóa này được dùng để lưu trữ các giá trị đến một dấu nhất định sau dấu thập phân. double là những con số có độ chính xác gấp đôi, càng gần với giá trị đã cho hoặc thu được từ kết quả tính toán càng tốt. Java Double được sử dụng cho mọi phép tính toán học (căn bậc hai, sin, cos, ..), cũng như cho tất cả các phép tính trong đó độ chính xác nhất định là quan trọng. kiểu dữ liệu float được sử dụng cho kiểu dấu phẩy động kém chính xác hơn. Nó được sử dụng rất hiếm khi để tiết kiệm bộ nhớ. Dưới đây chúng ta có một bảng với thông tin chính về float và double, cũng như sự khác biệt của chúng.
Trôi nổi Gấp đôi
Chủ yếu Float là một giá trị có độ chính xác đơn Đó là một giá trị có độ chính xác kép
Kích thước mặc định 4 byte (32 bit) 8 byte (64 bit)
Giá trị mặc định 0,0f 0,0
Phạm vi từ 1,4e–045 đến 3,4e+038 từ 4,9e–324 đến 1,8e+308
Nó dùng để làm gì Để tiết kiệm bộ nhớ để làm việc với các số phân số tương đối chính xác
Vì vậy, từ khóa Float có nghĩa là một số, một giá trị có độ chính xác đơn chiếm 32 bit hoặc 4 byte trong bộ nhớ. Trên một số bộ xử lý, làm việc với những con số như vậy nhanh hơn và như đã đề cập, chúng chiếm ít không gian hơn khi so sánh với những con số có độ chính xác gấp đôi. Tuy nhiên, không thể nói rõ ràng về tốc độ. Giả sử rằng một số bộ xử lý hiện đại xử lý các số có độ chính xác nhanh hơn chính xác gấp đôi.

Java Float và khai báo kép

Bạn có thể khai báo một số có kiểu double giống như các số có kiểu khác:
double myDouble = 2.7;
Tuy nhiên, nếu bạn biểu diễn số dấu phẩy động theo cách này, trình biên dịch sẽ yêu cầu bạn thay đổi loại số thành gấp đôi. Đây là một ví dụ không chính xác về biến float :
public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14;
   }
}
Đây là những gì sẽ xảy ra nếu bạn chạy chương trình này:
Error:(4, 25) java: incompatible types: possible lossy conversion from double to float
Thực tế là việc sử dụng số float là điều không mong muốn và điều này chỉ nên được thực hiện để tiết kiệm bộ nhớ. Tất cả các số phân số thực trong Java theo mặc định là Double và cú pháp của ngôn ngữ cũng nhấn mạnh điều này. Nếu bạn thực sự muốn làm việc với kiểu float, bạn cần chỉ định nó một cách rõ ràng bằng f kết thúc số.
public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14f;
   }
}
Nhân tiện, số float và số double có thể được viết dưới dạng hàm mũ.
float myFloat2 = 2E22f;
double myDouble2 = 3e10;
Nếu bạn sử dụng các số đủ lớn trong biểu diễn "bình thường" của chúng, Java sẽ hiển thị chúng ngay lập tức ở dạng hàm mũ. Hãy lấy một ví dụ:
public class FloatExample {
   public static void main(String[] args) {
//float variables
               float myFloatNumber1=2182818284590.45f;
               float myFloatNumber2=19822612787260.141592181f;
               System.out.println("myFloatNumber1 = " + myFloatNumber1);
               System.out.println("myFloatNumber2 = " + myFloatNumber2);
       System.out.println("myFloatNumber1 + myFloatNumber2 = " + myFloatNumber1 + myFloatNumber2);
           }
       }
Kết quả của chương trình này là đây:
myFloatNumber1 = 2.1828183E12 myFloatNumber2 = 1.98226121E13 myFloatNumber1 + myFloatNumber2 = 2.1828183E121.98226121E13

Ví dụ về số float và số kép đặc biệt

Có ba số dấu phẩy động đặc biệt trong ngôn ngữ Java, được sử dụng để biểu thị lỗi tràn và lỗi. Họ đây rồi:
  • Vô cực dương là kết quả của việc chia một số dương cho 0. Được biểu thị bằng các hằng số Double.POSITIVE_INFINITYFloat.POSITIVE_INFINITY .

  • Vô cực âm là kết quả của việc chia một số âm cho 0. Được biểu thị bằng các hằng số Double.NEGATIVE_INFINITYFloat.NEGATIVE_INFINITY .

  • NaN (không phải số) biểu thị phép tính 0/0 hoặc lấy căn bậc hai của số âm. Được biểu thị bằng các hằng số Double.NaNFloat.NAN .

Đây là một ví dụ về việc sử dụng các số dấu phẩy động đặc biệt này:
public class FloatExample {
   public static void main(String[] args) {
       int myInt = 1;
       float zero = 0.0f;
       double negZero = -0.0;
       double negativeInfinity = Double.NEGATIVE_INFINITY;
       double positiveInfinity = Float.POSITIVE_INFINITY;

       System.out.println(myInt / zero);
       System.out.println(myInt / negZero);
       System.out.println(zero == negZero);
       System.out.println(negativeInfinity * 0);
       System.out.println(positiveInfinity+negativeInfinity);

   }
}
Kết quả là:
Vô cực -Vô cực đúng NaN NaN

Độ chính xác gấp đôi có đủ không?

Trên thực tế, bất chấp độ chính xác gấp đôi của loại Double , việc sử dụng số dấu phẩy động, chẳng hạn như trong tính toán tài chính, không phải là ý tưởng tốt nhất vì lỗi làm tròn là không thể chấp nhận được. Vì vậy, hãy thử hiển thị đầu ra của chương trình sau trên màn hình.
public class FloatExample {
   public static void main(String[] args) {
       System.out. println( "2.0 - 1.1 = " + (2.0 - 1.1));
   }
}
Bạn sẽ nhận được kết quả sau:
2,0 - 1,1 = 0,8999999999999999
Sẽ là hợp lý khi cho rằng kết quả sẽ là 0,9. Tuy nhiên, những lỗi như vậy khá phổ biến và có liên quan đến cách biểu diễn số nhị phân bên trong. Ví dụ: chúng tôi không thể biểu thị giá trị chính xác của ⅓ dưới dạng phân số thập phân; tất nhiên, có những hạn chế tương tự trong hệ thống nhị phân. Nếu tác vụ yêu cầu loại bỏ các lỗi làm tròn, Java có lớp BigDecimal cho việc này.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION