Số dấu phẩy động trong python là gì

Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về kiểu float của Python, cách Python biểu thị các số dấu phẩy động và cách kiểm tra sự bằng nhau của số dấu phẩy động

Giới thiệu về kiểu float trong Python

Python sử dụng lớp

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
1 để biểu diễn các số thực

CPython thực hiện float bằng cách sử dụng loại kép C. Loại kép C thường triển khai float nhị phân độ chính xác kép IEEE 754, còn được gọi là binary64

Python float sử dụng 8 byte [hoặc 64 bit] để biểu diễn số thực. Không giống như kiểu số nguyên, kiểu float sử dụng một số byte cố định

Về mặt kỹ thuật, Python sử dụng 64 bit như sau

  • 1 bit cho dấu [dương hoặc âm]
  • 11 bit cho số mũ 1. 5e-5 1. 5 x 10-5 [số mũ là

    >>> format[0.1, '.20f'] '0.10000000000000000555'

    Code language: JavaScript [javascript]
    2] phạm vi là

    >>> format[0.1, '.20f'] '0.10000000000000000555'

    Code language: JavaScript [javascript]
    3
  • 52 bit cho chữ số có nghĩa

Để đơn giản, các chữ số có nghĩa là tất cả các chữ số trừ các số 0 ở đầu và cuối

Ví dụ: 0. 25 có hai chữ số có nghĩa là 0. 125 có ba chữ số có nghĩa và 12. 25 có 4 chữ số có nghĩa

[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ố thì không, e. g. ,

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
4. Đó là

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
5 ở dạng nhị phân

Do đó, Python chỉ có thể sử dụng các biểu diễn float gần đúng cho các số đó

lớp float Python

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
6 trả về một số dấu phẩy động dựa trên một số hoặc một chuỗi. Ví dụ

>>> float[0.1] 0.1 >>> float['1.25'] 1.25

Code language: JavaScript [javascript]

Nếu bạn chuyển một đối tượng [

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
7] cho

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
8, nó sẽ ủy quyền cho

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
9. Nếu

x = 0.1 + 0.1 + 0.1 y = 0.3 print[x == y]

Code language: PHP [php]
0 không được xác định, nó sẽ quay trở lại

x = 0.1 + 0.1 + 0.1 y = 0.3 print[x == y]

Code language: PHP [php]
1

Nếu bạn không chuyển bất kỳ đối số nào cho

x = 0.1 + 0.1 + 0.1 y = 0.3 print[x == y]

Code language: PHP [php]
2, nó sẽ trả về

x = 0.1 + 0.1 + 0.1 y = 0.3 print[x == y]

Code language: PHP [php]
3

Khi bạn sử dụng hàm

x = 0.1 + 0.1 + 0.1 y = 0.3 print[x == y]

Code language: PHP [php]
4, bạn sẽ thấy rằng số

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
4 được biểu thị chính xác là

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
4

Trong nội bộ, Python chỉ có thể đại diện cho khoảng

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
4

Để xem cách Python đại diện cho

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
4 bên trong, bạn có thể sử dụng hàm

x = 0.1 + 0.1 + 0.1 y = 0.3 print[x == y]

Code language: PHP [php]
9

Phần sau đây cho thấy cách Python đại diện cho số 0. 1 sử dụng 20 chữ số

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]

Như bạn có thể thấy,

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
4 không chính xác là

>>> format[0.1, '.20f'] '0.10000000000000000555'

Code language: JavaScript [javascript]
4 mà là

False

Code language: PHP [php]
2

Bởi vì Python có thể đại diện cho một số số float, nó sẽ gây ra nhiều vấn đề khi bạn so sánh hai số dấu phẩy động

kiểm tra bình đẳng

Hãy cùng xem ví dụ sau

x = 0.1 + 0.1 + 0.1 y = 0.3 print[x == y]

Code language: PHP [php]

đầu ra

False

Code language: PHP [php]

Bên trong, Python không thể sử dụng một số chữ số hữu hạn để biểu diễn các số

False

Code language: PHP [php]
3 và

False

Code language: PHP [php]
4

print[format[x, '.20f']] print[format[y, '.20f']]

Code language: PHP [php]

đầu ra

0.30000000000000004441 0.29999999999999998890

Code language: CSS [css]

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 vế của biểu thức đẳng thức thành một số chữ số có nghĩa. Ví dụ

x = 0.1 + 0.1 + 0.1 y = 0.3 print[round[x, 3] == round[y, 3]]

Code language: PHP [php]

đầu ra

True

Code language: PHP [php]

Cách giải quyết này không hoạt động trong mọi trường hợp

PEP485 cung cấp giải pháp khắc phục sự cố này bằng cách sử dụng dung sai tương đối và tuyệt đối

Nó cung cấp hàm

False

Code language: PHP [php]
5 từ mô-đun

False

Code language: PHP [php]
6 trả về

False

Code language: PHP [php]
7 nếu hai số tương đối gần nhau

Cái gì đang nổi

1. 22 số dấu phẩy động . 256, 2. 1 và 0. 0036 3.256, 2.1, and 0.0036 . Tiêu chuẩn dấu phẩy động được sử dụng phổ biến nhất là tiêu chuẩn IEEE.

Kiểu dữ liệu dấu phẩy động trong Python là gì?

A float là một loại giá trị trong Python . Khi được gọi, float[] trả về số dấu phẩy động hoặc dấu thập phân cho một số hoặc chuỗi được cung cấp. Các giá trị float trong Python được biểu diễn dưới dạng các giá trị có độ chính xác kép 64 bit. 1. 8 x 10308 là giá trị lớn nhất cho bất kỳ số dấu phẩy động nào.

số dấu phẩy động là gì?

Số dấu phẩy động, là số nguyên âm hoặc dương có dấu thập phân . Ví dụ: 5. 5, 0. 25 và -103. 342 đều là số dấu phẩy động, trong khi 91 và 0 thì không. Các số dấu phẩy động lấy tên của chúng theo cách dấu thập phân có thể "trôi nổi" đến bất kỳ vị trí nào cần thiết.

Chủ Đề