Python chuyển đổi điểm động ieee 754

PEP này đã bị từ chối. Sau khi mở trong bốn năm, nó đã không tạo ra đủ sự quan tâm của cộng đồng

Một số ý tưởng về PEP này đã được triển khai cho Python 2. 6.

float(str(x))
1 và
float(str(x))
2 hiện được đảm bảo hoạt động trên mọi nền tảng được hỗ trợ với ngữ nghĩa IEEE 754. Tuy nhiên, chuyến đi khứ hồi của
float(str(x))
3 vẫn không được hỗ trợ trừ khi bạn tự xác định inf và nan

>>> inf = float('inf')
>>> inf, 1E400
(inf, inf)
>>> neginf = float('-inf')
>>> neginf, -1E400
(-inf, -inf)
>>> nan = float('nan')
>>> nan, inf * 0.
(nan, nan)

Mô-đun toán học và sys cũng đã có thêm các tính năng,

float(str(x))
0,
float(str(x))
1,
float(str(x))
2,
float(str(x))
3

trừu tượng

PEP này đề xuất một API và cung cấp một mô-đun tham chiếu để tạo và kiểm tra các giá trị đặc biệt có độ chính xác kép của IEEE 754. vô cực dương, vô cực âm và không phải là số (NaN)

cơ sở lý luận

Tiêu chuẩn IEEE 754 xác định một tập hợp các biểu diễn nhị phân và quy tắc thuật toán cho số học dấu phẩy động. Bao gồm trong tiêu chuẩn là một tập hợp các hằng số để biểu thị các giá trị đặc biệt, bao gồm vô cực dương, vô cực âm và kết quả không xác định hoặc không phải là số (NaN). Hầu hết các CPU hiện đại đều triển khai tiêu chuẩn IEEE 754, bao gồm dòng bộ xử lý (Ultra)SPARC, PowerPC và x86

Hiện tại, việc xử lý các giá trị đặc biệt của IEEE 754 trong Python phụ thuộc vào thư viện C bên dưới. Thật không may, có rất ít sự nhất quán giữa các thư viện C về cách thức hoặc liệu các giá trị này có được xử lý hay không. Chẳng hạn, trên một số hệ thống “float(‘Inf’)” sẽ trả về đúng hằng số IEEE 754 cho giá trị vô cực dương. Tuy nhiên, trên nhiều hệ thống, thay vào đó, biểu thức này sẽ tạo ra một thông báo lỗi

Biểu diễn chuỗi đầu ra cho giá trị đặc biệt của IEEE 754 cũng thay đổi theo nền tảng. Ví dụ: biểu thức “float(1e3000)”, đủ lớn để tạo ra tràn, sẽ trả về một biểu diễn chuỗi tương ứng với vô cực dương của IEEE 754. Trăn 2. 1. 3 trên x86 Debian Linux trả về “inf”. Trên Sparc Solaris 8 với Python 2. 2. 1, biểu thức tương tự này trả về “Infinity” và trên MS-Windows 2000 với Active Python 2. 2. 1, nó trả về “1. #INF”

Thêm vào sự nhầm lẫn, một số nền tảng tạo một chuỗi khi chuyển đổi từ dấu phẩy động và chấp nhận một chuỗi khác để chuyển đổi sang dấu phẩy động. Trên các hệ thống này

float(str(x))

sẽ tạo ra lỗi khi “x” là một giá trị đặc biệt của IEEE

Trước đây, một số người đã khuyến nghị các lập trình viên sử dụng các biểu thức như

PosInf = 1e300**2
NaN = PosInf/PosInf

để có được vô cực dương và hằng số không phải là một số. Tuy nhiên, biểu thức đầu tiên tạo ra lỗi trên trình thông dịch Python hiện tại. Một thay thế có thể là sử dụng

PosInf = 1e300000
NaN = PosInf/PosInf

Mặc dù điều này không tạo ra lỗi với các trình thông dịch Python hiện tại, nhưng nó vẫn là một bản hack xấu xí và có khả năng không di động được. Ngoài ra, việc xác định NaN theo cách này sẽ giải quyết vấn đề phát hiện các giá trị đó. Đầu tiên, tiêu chuẩn IEEE 754 cung cấp toàn bộ tập hợp các giá trị không đổi cho Not-a-Number. Thứ hai, tiêu chuẩn yêu cầu rằng

________số 8

cho tất cả các giá trị có thể có của X, bao gồm cả NaN. Như một hệ quả

NaN == NaN

phải luôn đánh giá là sai. Tuy nhiên, hành vi này cũng không được thực hiện nhất quán. [e. g. Cygwin Python 2. 2. 2]

Do nhiều nền tảng và thư viện không nhất quán trong việc xử lý các giá trị đặc biệt của IEEE, không thể thiết lập hoặc phát hiện các giá trị dấu phẩy động IEEE 754 một cách nhất quán trong mã Python thông thường mà không cần dùng đến thao tác trực tiếp các mẫu bit

PEP này đề xuất API Python tiêu chuẩn và cung cấp triển khai mô-đun tham chiếu cho phép xử lý nhất quán các giá trị đặc biệt của IEEE 754 trên tất cả các nền tảng được hỗ trợ

Định nghĩa API

hằng số

Giá trị NaNNon-signaling IEEE 754 “Không phải là số”PosInfIEEE 754 Giá trị vô cực dươngNegInfIEEE 754 Giá trị vô cực âm

Chức năng

isNaN(value)Xác định xem đối số có phải là giá trị IEEE 754 NaN (Không phải là Số). isPosInf(value)Xác định xem đối số có phải là giá trị vô cực dương IEEE 754 không. isNegInf(value)Xác định xem đối số có phải là giá trị vô cực âm IEEE 754 không. isFinite(value)Xác định xem đối số có phải là giá trị IEEE 754 hữu hạn hay không (i. e. , không phải là NaN, vô cực dương hoặc âm). isInf(value)Xác định xem đối số có phải là giá trị IEEE 754 vô hạn (vô cực dương hay âm)

Thí dụ

(Chạy dưới Python 2. 2. 1 trên Solaris 8. )

float(str(x))
0

Thực hiện

Việc triển khai tham chiếu được cung cấp trong mô-đun “fpconst” [1], được viết bằng Python thuần túy bằng cách tận dụng mô-đun chuẩn “struct” để đặt hoặc kiểm tra trực tiếp các mẫu bit xác định các giá trị đặc biệt của IEEE 754. Đã cẩn thận để tạo ra kết quả phù hợp trên cả máy big-endian và little-endian. Việc triển khai hiện tại là Python thuần túy, nhưng có thể đạt được một số hiệu quả bằng cách dịch các thói quen cốt lõi sang C

Bản vá 1151323 “Mô-đun fpconst mới” [2] trên SourceForge thêm mô-đun fpconst vào thư viện chuẩn Python

Người giới thiệu

xem http. //bắp cải. cs. qc. edu/khóa học/cs341/IEEE-754tham chiếu. html để biết tài liệu tham khảo về tiêu chuẩn dấu phẩy động IEEE 754

IEEE 754 có nổi Python không?

Python float là IEEE 754 số dấu phẩy động nhị phân có độ chính xác kép, thường được gọi là "nhân đôi" và chiếm 64 bit. Những. 1 là dấu của số; .

Python có tự động chuyển thành float không?

Số nguyên và số dấu phẩy động có thể được trộn lẫn trong số học. Python 3 tự động chuyển đổi số nguyên thành số thực khi cần .

Bạn có thể chuyển đổi float thành nhị phân trong Python không?

Python không cung cấp bất kỳ phương thức sẵn có nào để dễ dàng chuyển đổi số thập phân dấu phẩy động thành số nhị phân .

Chúng ta có thể chuyển đổi float thành int trong Python không?

Một giá trị float có thể được chuyển đổi thành một giá trị int không lớn hơn giá trị đầu vào bằng cách sử dụng phép toán. hàm floor() , trong khi nó cũng có thể được chuyển đổi thành giá trị int là số nguyên nhỏ nhất lớn hơn giá trị đầu vào bằng toán học. chức năng trần(). Mô-đun toán học sẽ được nhập để sử dụng các phương thức này.