2011-11-21 30 views

Respuesta

16

El tamaño de un Python float se puede solicitar a través de sys.float_info. Sin embargo, nunca me encontré con nada más que 64 bits en muchas arquitecturas diferentes.

Los elementos de una matriz NumPy podrían tener diferente tamaño, pero se puede comprobar su tamaño en bytes por a.itemsize, donde a es una matriz NumPy.

+9

sys.float_info contiene muchas propiedades interesantes, pero el tamaño de un flotador no es uno de ellos –

+0

@ panda-34 Depende qué es exactamente lo que quiere decir con "tamaño". En cualquier caso, esa es la mejor información que puede obtener. (Puede recuperar fácilmente el tamaño en bits de la información en 'sys.float_info', pero me pregunto cómo podría ser útil alguna vez). –

+4

OP simplemente preguntó sobre el tamaño en bits, 32 o 64 y no puede recuperar el tamaño en bits de float_info a menos que quieras hacer algunas conjeturas basadas en el rango del exponente y la longitud de la mantisa –

4

El rango de valores de coma flotante está disponible en el objeto sys.float_info.

Como dice Sven, para CPython float siempre es de 64 bits. Pero Python's language reference dice

Usted está a merced de la arquitectura de la máquina subyacente (y C o Java aplicación) para el rango aceptado ... ".

Así que esto no es necesariamente el caso de otra implementaciones de Python

+0

Dado que OP usa NumPy, es probable que no le preocupen demasiado otras implementaciones de Python. Buen punto, sin embargo. :) –

6

numpy.finfo enumera los tamaños y otros atributos de float32 ..., incluyendo
Nexp:.. número de bits en el exponente incluyendo su signo y el sesgo
nmant: número de bits en la mantisa.
En una máquina con IEEE-754 punto flotante estándar,

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

imprimirá por ejemplo

float32 8 23 
float64 11 52 
float64 11 52 

(Trate float16 y float128 también.)

+0

más un bit para el signo – denfromufa

+0

float16 \t Float de media precisión: bit de signo, 5 bits exponente, 10 bits mantissa; float32 \t Flotador de precisión simple: bit de signo, exponente de 8 bits, mantisa de 23 bits; float64 \t Flotador de precisión doble: bit de signo, exponente de 11 bits, mantisa de 52 bits – 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 
--------------------------------------------------------------------- 
Cuestiones relacionadas