2011-11-21 30 views

Trả lời

16

Kích thước của một Python float có thể được yêu cầu thông qua sys.float_info. Tuy nhiên, tôi chưa bao giờ gặp bất cứ điều gì khác hơn 64 bit, trên nhiều kiến ​​trúc khác nhau.

Các mục của một mảng NumPy có thể có kích thước khác nhau, nhưng bạn có thể kiểm tra kích thước của chúng theo byte theo a.itemsize, trong đó a là mảng NumPy.

+9

sys.float_info chứa nhiều tính chất hấp dẫn nhưng kích thước của một phao không phải là một trong số họ –

+0

@ panda-34 Nó phụ thuộc chính xác những gì bạn có ý nghĩa bởi "kích thước". Trong mọi trường hợp, đó là thông tin tốt nhất bạn có thể nhận được. (Bạn có thể dễ dàng phục hồi kích thước theo bit từ thông tin trong 'sys.float_info', nhưng tôi tự hỏi nó sẽ hữu ích như thế nào.) –

+4

OP được hỏi một cách rõ ràng về kích thước theo bit, 32 hoặc 64 và bạn không thể phục hồi kích thước bit từ float_info trừ khi bạn muốn làm một số đoán hoang dã dựa trên phạm vi số mũ và chiều dài mantissa –

4

Phạm vi của các giá trị dấu phẩy động có sẵn trong đối tượng sys.float_info.

Như Sven nói, đối với CPython float luôn là 64 bit. Nhưng Python's language reference nói

Bạn đang ở lòng thương xót của kiến ​​trúc máy nằm bên dưới (và C hoặc Java thực hiện) trong phạm vi chấp nhận ... ".

Vì vậy, đây không nhất thiết phải là trường hợp cho khác triển khai Python

+0

Vì OP đang sử dụng NumPy, rất có thể anh ta không quan tâm quá nhiều đến việc triển khai Python khác. Điểm tốt, mặc dù. :) –

6

numpy.finfo danh sách kích thước và các thuộc tính khác của float32 ..., bao gồm
nexp:.. số bit trong số mũ bao gồm dấu hiệu và thiên vị của nó
nmant: số các bit trong phần định trị.
Trên một máy với IEEE-754 điểm nổi tiêu chuẩn,

import numpy as np 
for f in (np.float32, np.float64, float): 
    finfo = np.finfo(f) 
    print finfo.dtype, finfo.nexp, finfo.nmant 

sẽ in ví dụ

float32 8 23 
float64 11 52 
float64 11 52 

(Hãy thử float16 và float128 quá.)

+0

cộng một bit cho ký hiệu – denfromufa

+0

float16 \t phao chính xác một nửa: bit dấu, số bit 5 bit, số bit 10 bit; float32 \t phao chính xác đơn: bit dấu, số bit 8 bít, 23 bit mantissa; float64 \t Đuôi chính xác kép: bit dấu, số bit 11 bit, số bit 52 bit – denfromufa

3
print numpy.finfo(numpy.float) 
Machine parameters for float64 
--------------------------------------------------------------------- 
precision= 15 resolution= 1.0000000000000001e-15 
machep= -52 eps=  2.2204460492503131e-16 
negep = -53 epsneg=  1.1102230246251565e-16 
minexp= -1022 tiny=  2.2250738585072014e-308 
maxexp= 1024 max=  1.7976931348623157e+308 
nexp = 11 min=  -max 
--------------------------------------------------------------------- 
Các vấn đề liên quan