Đang chạy
sys.getsizeof[float]
Không trả về kích thước của bất kỳ phao cá nhân nào, nó trả về kích thước của lớp
sys.getsizeof[float[]]
5. Lớp đó chứa nhiều dữ liệu hơn bất kỳ bản nổi nào, vì vậy kích thước được trả lại cũng sẽ lớn hơn nhiều.Nếu bạn chỉ muốn biết kích thước của một chiếc phao duy nhất, cách dễ nhất là chỉ đơn giản là khởi tạo một số phao tùy ý. Ví dụ:
sys.getsizeof[float[]]
Lưu ý rằng
float[]
Đơn giản chỉ cần trả lại
sys.getsizeof[float[]]
6, vì vậy điều này thực sự tương đương với:sys.getsizeof[0.0]
Điều này trả về
sys.getsizeof[float[]]
7 byte trong trường hợp của bạn [và có lẽ đối với hầu hết những người khác là tốt]. Trong trường hợp cpython [triển khai python phổ biến nhất], mỗi đối tượng sys.getsizeof[float[]]
5 sẽ chứa một bộ đếm tham chiếu và một con trỏ tới loại [một con trỏ tới lớp sys.getsizeof[float[]]
5] 32 bit cpython. Các byte còn lại [float[]
0 trong trường hợp của bạn rất có thể là 64 bit cpython] sẽ là các byte được sử dụng cho chính giá trị nổi thực tế.Điều này không được đảm bảo để tìm ra cùng một cách cho các triển khai Python khác. Tài liệu tham khảo ngôn ngữ nói:
Chúng đại diện cho số điểm nổi độ chính xác kép ở cấp độ máy. Bạn đang ở trong lòng thương xót của kiến trúc máy cơ bản [và triển khai C hoặc Java] cho phạm vi được chấp nhận và xử lý tràn. Python không hỗ trợ số điểm nổi chính xác đơn; Tiết kiệm trong bộ xử lý và sử dụng bộ nhớ thường là lý do để sử dụng chúng bị lấn át bởi chi phí sử dụng các đối tượng trong Python, do đó không có lý do gì để làm phức tạp ngôn ngữ với hai loại số điểm nổi.
Và tôi không biết về bất kỳ phương pháp thời gian chạy nào để cho bạn biết chính xác số lượng byte được sử dụng. Tuy nhiên, lưu ý rằng trích dẫn ở trên từ tham chiếu ngôn ngữ không nói rằng Python chỉ hỗ trợ các phao chính xác gấp đôi, vì vậy trong hầu hết các trường hợp [tùy thuộc vào mức độ quan trọng đối với bạn để luôn luôn đúng 100%] .
Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu về loại phao Python, cách Python đại diện cho các số điểm nổi và cách kiểm tra số điểm nổi cho bình đẳng.: in this tutorial, you’ll learn about the Python float type, how Python represents floating-point numbers, and how to test the floating-point number for equality.
Giới thiệu về loại phao Python
Python sử dụng lớp
sys.getsizeof[float[]]
5 để thể hiện số thực.Cpython thực hiện float bằng cách sử dụng loại c kép. Loại C kép thường thực hiện phao nhị phân hai điểm chính xác của IEEE 754, còn được gọi là nhị phân64.
Python Float sử dụng 8 byte [hoặc 64 bit] để biểu thị số thực. Không giống như loại số nguyên, loại float sử dụng số byte cố định.
Về mặt kỹ thuật, Python sử dụng 64 bit như sau:
- 1 bit cho dấu hiệu [dương hoặc âm]
- 11 bit cho số mũ 1.5E-5 1,5 x 10-5 [số mũ là
2] Phạm vi làfloat[]
3.float[]
- 52 bit cho các chữ số quan trọng
Để đơn giản, các chữ số quan trọng là tất cả các chữ số ngoại trừ các số không dẫn đầu và theo dõi.
Ví dụ, 0,25 có hai chữ số quan trọng, 0,125 có ba chữ số quan trọng và 12,25 có bốn chữ số quan trọng.
[1.25] 10 = [1 × 20 + 0x2-1 + 1 × 2-2] 10 = [1.01] 2
Một số số có biểu diễn nhị phân hữu hạn, nhưng một số don don, ví dụ,
float[]
4. Nó float[]
5 trong nhị phân.Bởi vì điều này, Python chỉ có thể sử dụng các biểu diễn nổi gần đúng cho các số đó.
Lớp phao Python
float[]
6 trả về một số điểm nổi dựa trên một số hoặc một chuỗi. Ví dụ:Code language: JavaScript [javascript]
>>> float[0.1] 0.1 >>> float['1.25'] 1.25
Nếu bạn chuyển một đối tượng [
float[]
7] cho float[]
8, nó sẽ ủy thác cho float[]
9. Nếu sys.getsizeof[0.0]
0 không được xác định, nó sẽ quay trở lại sys.getsizeof[0.0]
1.Nếu bạn không chuyển bất kỳ đối số nào cho
float[]
6, nó sẽ trả lại sys.getsizeof[float[]]
6Khi bạn sử dụng hàm
sys.getsizeof[0.0]
4, bạn sẽ thấy rằng số float[]
4 được biểu diễn chính xác là float[]
4.Trong nội bộ, Python chỉ có thể đại diện cho
float[]
4 khoảng.Để xem Python đại diện cho
float[]
4 trong nội bộ như thế nào, bạn có thể sử dụng hàm sys.getsizeof[0.0]
9.Sau đây cho thấy Python đại diện cho số 0,1 bằng cách sử dụng 20 chữ số:
Code language: JavaScript [javascript]
>>> format[0.1, '.20f'] '0.10000000000000000555'
Như bạn có thể thấy,
float[]
4 không chính xác là ____24 mà 2
>>> float[0.1] 0.1 >>> float['1.25'] 1.25
Code language: JavaScript [javascript]
Bởi vì Python có thể đại diện cho một số phao xấp xỉ, nó sẽ gây ra nhiều vấn đề khi bạn so sánh hai số điểm nổi.
Kiểm tra bình đẳng
Hãy cùng xem ví dụ sau:
Code language: PHP [php]
x = 0.1 + 0.1 + 0.1 y = 0.3 print[x == y]
Output:
Code language: PHP [php]
False
Trong nội bộ, Python không thể sử dụng số chữ số hữu hạn để biểu thị các số
3 vàCode language: JavaScript [javascript]
>>> float[0.1] 0.1 >>> float['1.25'] 1.25
4:Code language: JavaScript [javascript]
>>> float[0.1] 0.1 >>> float['1.25'] 1.25
Code language: PHP [php]
print[format[x, '.20f']] print[format[y, '.20f']]
Output:
Code language: CSS [css]
0.30000000000000004441 0.29999999999999998890
Lưu ý rằng số chữ số là vô hạn. Chúng tôi chỉ hiển thị 20 chữ số đầu tiên.
Một cách để giải quyết vấn đề này là làm tròn cả hai mặt của biểu thức bình đẳng thành một số chữ số quan trọng. Ví dụ:
sys.getsizeof[float[]]
0Output:
sys.getsizeof[float[]]
1Cách giải quyết này không làm việc trong mọi trường hợp.
PEP485 cung cấp một giải pháp khắc phục vấn đề này bằng cách sử dụng dung sai tương đối và tuyệt đối.
Nó cung cấp hàm
5 từ mô -đunCode language: JavaScript [javascript]
>>> float[0.1] 0.1 >>> float['1.25'] 1.25
6 trả vềCode language: JavaScript [javascript]
>>> float[0.1] 0.1 >>> float['1.25'] 1.25
7 nếu hai số tương đối gần nhau.Code language: JavaScript [javascript]
>>> float[0.1] 0.1 >>> float['1.25'] 1.25
Sau đây cho thấy chữ ký chức năng
5:Code language: JavaScript [javascript]
>>> float[0.1] 0.1 >>> float['1.25'] 1.25
sys.getsizeof[float[]]
2Ví dụ:
sys.getsizeof[float[]]
3Output:
sys.getsizeof[float[]]
1Bản tóm tắt
- Python sử dụng lớp
5 để thể hiện số thực.sys.getsizeof[float[]]
- Python sử dụng một số byte cố định [8 byte] để biểu thị phao. Do đó, nó có thể đại diện cho một số số trong nhị phân khoảng.
- Sử dụng hàm
5 từ mô-đun toán học để kiểm tra bình đẳng cho các số điểm nổi.
Code language: JavaScript [javascript]>>> float[0.1] 0.1 >>> float['1.25'] 1.25
Bạn có thấy hướng dẫn này hữu ích không?