Python double float64

Float và double là các kiểu dữ liệu nguyên thủy được các ngôn ngữ lập trình sử dụng để lưu trữ các số thực [thập phân] dấu phẩy động như 10. 923455, 433. 45554598, v.v. Bài viết này sẽ cung cấp cho bạn sự khác biệt chi tiết giữa kiểu dữ liệu float và double

Nổi vs Đôi. Sự khác biệt Bạn nên biết

Trong thế giới điện toán, dữ liệu số có thể được biểu diễn theo 2 cách – số học dấu phẩy động và dấu phẩy động. Dữ liệu điểm cố định là cái mà chúng ta gọi là số nguyên với một số loại hệ số tỷ lệ. Ví dụ: 3. 14 sẽ là 314 với hệ số tỷ lệ là 100 hoặc 2. 3456 có thể được làm tròn thành 2. 345 để đạt được một số chữ số cố định. Phương pháp này ảnh hưởng đến độ chính xác của kết quả và không phù hợp trong mọi trường hợp

Do đó, việc sử dụng biểu diễn dấu phẩy động cho các phép tính có độ chính xác cao sẽ dễ dàng và chính xác hơn [như chúng ta sẽ thấy trong phần tiếp theo]

Nếu bạn muốn đọc về các số dấu phẩy động từ quan điểm số học, bạn có thể đọc bài viết Wikipedia này. Đối với blog này, chúng tôi đã tập trung vào cách các ngôn ngữ lập trình sử dụng các số dấu phẩy động này để nhận các giá trị và phạm vi chính xác

Tại sao sử dụng dữ liệu dấu phẩy động?

độ chính xác hỗn hợp

Ở độ chính xác hỗn hợp, các giá trị độ chính xác đơn có thể được sử dụng cho các phép tính phức tạp. Bạn có thể coi đó là sự đánh đổi giữa độ chính xác và hiệu quả bộ nhớ. Bằng cách kết hợp float16 [độ chính xác một nửa] và float32 [độ chính xác đơn], các ứng dụng có thể tăng hiệu suất ứng dụng và tốc độ truyền dữ liệu. Độ chính xác một nửa được Microsoft và Nvidia xác định để tiết kiệm không gian và độ phức tạp của các phép tính dấu phẩy động

Nhưng, không phải lúc nào

độ chính xác tùy ý

Chúng tôi sử dụng toán số nguyên và dấu phẩy động để tính toán chính xác trong đó kết quả chỉ bị giới hạn bởi dung lượng bộ nhớ khả dụng trên hệ thống. Loại tính toán này được gọi là tính toán chính xác tùy ý hoặc vô hạn. Một trong những ứng dụng quan trọng nhất của độ chính xác tùy ý là mật mã khóa công khai trong đó các phép tính với các số có hàng trăm chữ số [số mũ] là một hình ảnh phổ biến

Một loại độ chính xác tương tự khác là phép tính ký hiệu trong đó chúng tôi sử dụng các giá trị chính xác của ký hiệu [như PI] cho các phép tính phức tạp

Nổi và nhân đôi

Double chính xác hơn float và có thể lưu trữ 64 bit, gấp đôi số bit float có thể lưu trữ

Double chính xác hơn và để lưu trữ số lượng lớn, chúng tôi thích double hơn float. Ví dụ, để lưu trữ lương hàng năm của CEO một công ty, double sẽ là lựa chọn chính xác hơn. Tất cả các hàm lượng giác như sin, cos, tan, các hàm toán học như sqrt đều trả về giá trị kép. Tuy nhiên, gấp đôi đi kèm với một chi phí. Trừ khi chúng tôi cần độ chính xác lên đến 15 hoặc 16 điểm thập phân, chúng tôi có thể giữ nổi trong hầu hết các ứng dụng, vì gấp đôi đắt hơn. Mất khoảng 8 byte để lưu trữ một biến. Chúng tôi thêm 'f' hoặc 'F' vào số để chỉ ra rằng đó là kiểu float không thành công và nó được coi là gấp đôi

Một bảng nhỏ cung cấp yêu cầu bộ nhớ và phạm vi float và double được hiển thị bên dưới –

Loại dấu chấm độngYêu cầu bộ nhớPhạm viFloat4 byte±3. 40282347E+38F tôi. e. 6-7 chữ số có nghĩaDouble8 byte±1. 79769313486231570E+308 tôi. e. 15-16 chữ số có nghĩa

Chức năng float và double theo cùng một cách trong tất cả các ngôn ngữ lập trình. Ví dụ: trong Java, cả hai sẽ ném NumberFormatException với các hoạt động không liên quan đến số thực. Lưu ý rằng trình biên dịch sẽ không phát hiện ngoại lệ này

String sname = "DR";
float fname = Float.parseFloat[sname];
System.out.println[fname/num1]; // Leads to NumberFormatException at runtime
Dividing float and double by zero will give an output of ‘Infinity’ in Java.
double num2 = 344.55555555;
System.out.println[num2/0];

Điều này sẽ không gây ra lỗi nhưng là một thao tác không hợp lệ [NaN]. Tìm hiểu thêm về NaN tại đây

Chúng ta sẽ sử dụng các giá trị độ chính xác ở đâu?

hầu như ở khắp mọi nơi

Nếu bạn làm việc với lượng dữ liệu nhỏ – như điểm trung bình, diện tích tam giác, v.v… hãy sử dụng gấp đôi theo mặc định. Tuy nhiên, nếu bạn xử lý nhiều con số liên quan đến độ chính xác cao và bất kỳ phép làm tròn nào cũng có thể thay đổi kết quả – như lượng giác, chiều rộng của sợi tóc người, mạng thần kinh, spin của electron, tọa độ của một vị trí, v.v. . Mặc dù Java khuyến khích bạn sử dụng gấp đôi, nhưng trong các ngôn ngữ như C, bạn có thể linh hoạt sử dụng bất cứ thứ gì bạn muốn

Một khai báo java điển hình sẽ giống như -

float number1 = [float] 12.211111111111;

Bây giờ, nếu bạn không thực hiện việc đánh máy đó, mã của bạn sẽ không được biên dịch trong Java. Khi bạn làm điều đó, trong khi in số, bạn sẽ chỉ nhận được 6 chữ số sau dấu thập phân

Xét một chương trình nhân hai số đơn giản – 1. 42222*234. 56433 viết bằng C

Đây có thể là bất cứ thứ gì như khối lượng nguyên tử hoặc lực hấp dẫn phải còn nguyên vẹn tất cả các chữ số có nghĩa của nó

float num1 = 1.42222*234.56433;
double num2 = 1.42222*234.56433;
printf["%f", num1];
printf["%.10f", num2];

Trong khi num1 trả về giá trị là 333. 602081, num2 được khai báo là trả về gấp đôi 333. 6020814126, chính xác tới 10 chữ số như đã đề cập trong câu lệnh printf của chúng tôi. Chúng ta cũng có thể in một float dưới dạng double và ngược lại, tất cả phụ thuộc vào cách chúng ta viết câu lệnh printf. Viết %f sẽ loại bỏ một số chữ số có nghĩa, trong khi khi chúng tôi chỉ định số lượng chữ số, toàn bộ giá trị cho đến đó sẽ được in ra. Để in giá trị theo cấp số nhân, bạn nên sử dụng “%e”

Trong Java, như chúng ta đã thấy trước đó, chỉ khi chúng ta đánh máy thành [float], giá trị mới được in. Java lấy tất cả các giá trị thập phân có độ chính xác cao làm gấp đôi theo mặc định

float values;
double doubes;
values = [float] [1.42222*234.56433];
doubes = 1.42222*234.56433;
System.out.println[values];
System.out.println[doubes];

sẽ mang lại 333. 60208 và 333. 6020814126 tương ứng

so sánh logic

We use the operators to compare float and double values. With integers, we can use != and = but here we don’t because the latter operators are less precise.

Rõ ràng, khi sử dụng float, không thể so sánh chính xác vì độ chính xác chỉ đến 5-6 chữ số. Bất kỳ sự khác biệt trong các con số không bị bắt

float number1 = [float] 3.1434343;
float number2 = [float] 3.1434343333;
 if[number1 == number2]
 System.out.println["equal"];
 else
 System.out.println["not equal"];

double number3 = 3.1434343;
double number4 = 3.1434343333;
 if[number3 == number4]
 System.out.println["equal"];
 else
 System.out.println["not equal"];

Bạn nghĩ đầu ra sẽ là gì?

Bạn có thể đã đoán ra – cái đầu tiên sẽ cho “bằng”, trong khi cái thứ hai sẽ cho “không bằng”

Để tránh đánh máy mỗi khi chúng ta viết số ở dạng float, chúng ta có thể thêm 'f' vào hậu tố của số đó. Ví dụ,

float number1 = 3.1434343f;

thập phân lớn

NET và Java cũng có lớp Decimal/BigDecimal có độ chính xác cao hơn gấp đôi. Để tính toán chính xác hơn như trong các ứng dụng tài chính và ngân hàng, Số thập phân được sử dụng vì nó giảm thêm lỗi làm tròn

đôi dài

Một số ngôn ngữ lập trình như C sử dụng double dài cho độ chính xác cao hơn double. Kiểm tra các kiểu dữ liệu khác nhau của C

Phân chia với float và double

Tương tự như trong phép nhân hoặc phép cộng, phép chia sẽ cho các chữ số kép chính xác hơn. Hãy xem xét ví dụ đơn giản này –

float number1 = 3.1434343f;
double number2 = 3.1434343;
float divide = 22/7f;
// first let us print the result as double
double result1 = number1/divide;
/* the same result but now it is a float value,
note the difference in significant digits */
float result3 = number1/divide;
// the double value
double result2 = number2/divide;
System.out.println[result1]; // 1.0001837015151978
System.out.println[result3]; // 1.0001837
System.out.println[result2]; // 1.000183662587488

Điều này đặc biệt hữu ích khi mẫu số lớn hơn tử số và kết quả là phân số nhỏ như –

float pie = 22/7f;
float pieby4096 = pie/4096;
double dpie = 22/7d;
double dpieby4096 = dpie/4096;
System.out.println["Float Pie is - " + pie];
System.out.println["Double pie is - " + dpie];
System.out.println["Float Pie divided by 4096 - " + pieby4096];
System.out.println["Double Pie divided by 4096 - " + dpieby4096];
double pieby4096usingfloatpie = pie/4096;
System.out.println["Float Pie divided by 4096 with result as double - " + pieby4096usingfloatpie];

Xem kết quả –

________số 8

Hãy chú ý đến 3 kết quả cuối cùng. Chiếc bánh mà chúng ta chọn để chia các con số tạo nên sự khác biệt về chữ số có nghĩa của kết quả. Đây chính xác là độ chính xác mà chúng ta đang nói đến

Trong Java, có thể nối các chuỗi bằng double và float bằng toán tử +

String str = "test";
float flo = 23.2f;
String concat = str + flo;
double dou = 3.45555555;
concat += dou;
System.out.println[concat]; // result will be test23.23.45555555

Nổi vs đôi. So sánh trực tiếp

Bây giờ chúng ta đã biết float và double là gì, sẽ rất tốt nếu tạo một bảng khác biệt để tham khảo và tóm tắt nhanh

FloatDoubleGiá trị chính xác đơn Giá trị chính xác képCó thể lưu trữ Tối đa 7 chữ số có nghĩaLưu trữ tối đa 15 chữ số có nghĩaChiếm 4 byte bộ nhớ [32 bit IEEE 754]Chiếm 8 byte bộ nhớ [64 bit IEEE 754]Nếu có nhiều hơn 7 chữ số, giá trị được làm tròn7

float fnum = 2. 344f;

hoặc

float fnum = [phao] 2. 344;

Double là loại dấu thập phân mặc định cho Java

đôi dnum = 2. 344;

Nếu không yêu cầu độ chính xác cao và chương trình chỉ cần lưu trữ một mảng lớn các số thập phân, float là cách lưu trữ dữ liệu hiệu quả về chi phí và tiết kiệm bộ nhớ. Double đắt hơn, chiếm nhiều không gian hơn và hiệu quả hơn khi cần độ chính xác cao hơn. Ví dụ: chuyển đổi tiền tệ, báo cáo tài chính và giao dịch, tính toán khoa học, v.v…

Làm chủ cấu trúc dữ liệu & thuật toán sử dụng C và C++

Phần kết luận

Đây là sự khác biệt hoàn toàn giữa Double vs Float; . Nếu bạn chuyển đổi quá thường xuyên, độ chính xác có thể bị mất và bạn sẽ mất toàn bộ mục đích của việc sử dụng gấp đôi

Trong các giai đoạn phát triển ban đầu, hãy quyết định và xác định xem bạn muốn sử dụng float hay double và duy trì như vậy trong suốt ứng dụng. Bạn cũng nên biết cách dữ liệu cụ thể được lưu trữ trong cơ sở dữ liệu. Nếu ứng dụng của bạn cần hiệu suất cao, hãy sử dụng float, vì với tập dữ liệu lớn, double có thể khiến chương trình của bạn chạy chậm. Nếu dữ liệu của bạn cần độ chính xác cao hơn, hãy sử dụng gấp đôi

Là một đôi một float64?

Float64 chỉ là bí danh loại của Double .

Python có sử dụng float64 không?

Số dấu phẩy động của Python thường là số dấu phẩy động 64 bit , gần tương đương với np. phao64. Trong một số tình huống bất thường, có thể hữu ích khi sử dụng các số dấu phẩy động với độ chính xác cao hơn.

float64 có nghĩa là gì trong Python?

Định dạng dấu phẩy động độ chính xác kép [đôi khi được gọi là FP64 hoặc float64] là định dạng số dấu phẩy động, thường chiếm 64 bit trong bộ nhớ máy tính; .

NumPy float64 là loại gì?

Kiểu dữ liệu chuẩn NumPy

Chủ Đề