2010-02-09 43 views
19

Cách tốt nhất để mô phỏng điểm nổi chính xác đơn trong python là gì? (Hoặc các định dạng điểm nổi khác cho vấn đề đó?) Chỉ cần sử dụng ctypes?Cách chính xác để mô phỏng điểm nổi chính xác đơn trong python?

+2

Bạn có ý nghĩa gì khi "mô phỏng"? Đọc nổi từ các đốm màu nhị phân? Thực hiện toán học ở độ chính xác đơn và nhận được kết quả tương tự như một ngôn ngữ khác? (Nếu sau này, lưu ý rằng "float" toán học trong C trên x86 thực sự được đánh giá trong 80-bit và giảm xuống 32-bit khi nó được lưu trữ.) –

Trả lời

3

Nếu ứng dụng của bạn phù hợp với các mảng/ma trận, bạn có thể sử dụng NumPy với float32

11

Nếu numpy (những gợi ý tuyệt vời của câu trả lời khác) không áp dụng cho bạn (ví dụ bởi vì bạn đang ở trong một môi trường mà không cho phép tiện ích mở rộng của bên thứ ba tùy ý), mô-đun array trong thư viện chuẩn Python cũng tốt - nhập mã 'f' cung cấp cho bạn phao 32 bit. Bên cạnh đó và các phao chính xác kép (thông thường), không có gì nhiều cho "các định dạng điểm nổi khác" - bạn đã nghĩ gì? (ví dụ: gmpy cung cấp hỗ trợ khiêm tốn của GMP cho các phao nổi có kích thước bit dài hơn, tùy ý - nhưng thực tế là khiêm tốn, ví dụ: không có chức năng trig).

6

làm thế nào về ctypes.c_float từ thư viện chuẩn?

1

Có thể sử dụng mô-đun struct của Python để cắt ngắn phao 64 bit về độ chính xác của phao 32 bit.

Ví dụ:

>>> x = 1.1122334455667788 
>>> x 
1.1122334455667788 
>>> struct.unpack('f', struct.pack('f', x))[0] 
1.1122334003448486 

Để làm phép tính chỉ với phao nổi 32-bit, bạn sẽ cần phải áp dụng hoạt động cắt ngắn này để kết quả của mọi hoạt động số học.

Các vấn đề liên quan