2015-04-23 14 views
6

Tôi đã kiểm tra kích thước của một con trỏ trong terminal python của tôi (trong Enthought Canopy IDE) quaKhông thể sử dụng 128bit phao bằng Python trên kiến ​​trúc 64bit

import ctypes 
print (ctypes.sizeof(ctypes.c_voidp) * 8) 

Tôi đã một kiến ​​trúc 64bit và làm việc với numpy.float64 chỉ là khỏe. Nhưng tôi không thể sử dụng ?

np.array([1,1,1],dtype=np.float128) 

hoặc

np.float128(1) 

kết quả trong:

AttributeError: 'module' object has no attribute 'float128' 

Tôi đang chạy phiên bản sau:

sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0) 
+1

Bạn có thể thêm lệnh hoàn chỉnh đã nhận được lỗi này không? Tôi đã thử sử dụng np.float128 trên máy tính của mình và nó hoạt động tốt – CoMartel

+1

@Matthias: Trừ khi bạn có một nền tảng rất khác thường (ví dụ: máy tính lớn của IBM), NumPy gần như chắc chắn không cung cấp cho bạn quyền truy cập vào các phao nổi 128 bit thực sự. Trên một số nền tảng, NumPy hỗ trợ định dạng dấu chấm động 80 bit x87 được định nghĩa trong phiên bản 1985 của chuẩn IEEE 754 và trên một số nền tảng *, định dạng đó được báo cáo là 'float128' (trong khi các định dạng khác được báo cáo là 'float96'). Nhưng tất cả những gì đang xảy ra ở đó là bạn có một định dạng 80 bit với 48 bit (hoặc 16 bit) của padding. –

+0

@PadraicCunningham 'np.longdouble' dẫn đến' np.float64' – Matthias

Trả lời

0

Cập nhật: Từ các ý kiến, có vẻ như vô nghĩa thậm chí có một phao 128 bit trên một hệ thống 64 bit.

Tôi đang sử dụng anaconda trên 64-bit Ubuntu 14.04 hệ thống với sys.version_info(major=2, minor=7, micro=9, releaselevel='final', serial=0)

và 128 nổi chút hoạt động tốt:

import numpy 
a = numpy.float128(3) 

Đây có thể là một vấn đề phân phối. Hãy thử:

EDIT: Update từ nhận xét:

Không phải của tôi, nhưng bài đăng này không thực sự trả lời "tại sao d oesn't np.float128 tồn tại trên máy của tôi "câu hỏi ngụ ý. Câu trả lời đúng là rằng đây là nền tảng cụ thể: float128 tồn tại trên một số nền tảng nhưng không phải là những người khác và trên những nền tảng mà nó tồn tại gần như chắc chắn chỉ đơn giản là 80-bit x87 mở rộng loại chính xác, đệm đến 128 bit. - Mark Dickinson

+1

Đó gần như chắc chắn * không * một phao 128 bit, ít nhất là không theo định dạng IEEE 754 binary128. Đó là một phao 80 bit với 48 bit đệm. –

+0

Tham khảo hướng dẫn sử dụng Bumpy - trên một số nền tảng, nó sẽ vui vẻ cho phép bạn khai báo một phao 256. Việc thực thi nội bộ cần được kiểm tra – shaunakde

+2

Thử làm 'numpy.float128 (1) + numpy.float128 (2 ** - 64) - numpy.float128 (1) '. Tôi nghi ngờ bạn sẽ nhận được câu trả lời của '0.0', chỉ ra rằng loại' float128' không chứa quá 64 bit chính xác. –

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