How to check the size of a float in python?

前端 未结 5 1171
感动是毒
感动是毒 2020-12-17 08:41

I want to check whether a float is actually 32 or 64bits (and the number of bits of a numpy float array). There should be a built-in, but just didn\'t find out...

相关标签:
5条回答
  • 2020-12-17 08:59

    python -c "import sys,math; print(sys.float_info.mant_dig + math.ceil(math.log2(sys.float_info.max_10_exp - sys.float_info.min_10_exp)) + 1)"

    "+1" because one digit in the mantissa is stored implicitly.

    0 讨论(0)
  • 2020-12-17 09:04

    numpy.finfo lists sizes and other attributes of float32 ..., including
    nexp : number of bits in the exponent including its sign and bias.
    nmant : number of bits in the mantissa.
    On a machine with IEEE-754 standard floating point,

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

    will print e.g.

    float32 8 23
    float64 11 52
    float64 11 52
    

    (Try float16 and float128 too.)

    0 讨论(0)
  • 2020-12-17 09:07

    Properties of a Python float can be requested via sys.float_info. It returns information such as max/min value, max/min exp value, etc. These properties can potentially be used to calculate the byte size of a float. I never encountered anything else than 64 bit, though, on many different architectures.

    The items of a NumPy array might have different size, but you can check their size in bytes by a.itemsize, where a is a NumPy array.

    0 讨论(0)
  • 2020-12-17 09:08

    The range of floating point values is available in the sys.float_info object.

    As Sven says, for CPython float is always 64-bit. But Python's language reference says

    You are at the mercy of the underlying machine architecture (and C or Java implementation) for the accepted range ...".

    So this is not necessarily the case for other Python implementations.

    0 讨论(0)
  • 2020-12-17 09:20
    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
    ---------------------------------------------------------------------
    
    0 讨论(0)
提交回复
热议问题