如何在python中检查float的大小?

Hai*_*ang 23 python numpy

我想检查浮点数实际上是32位还是64位(以及numpy浮点数组的位数).应该有一个内置的,但只是没有发现...

Sve*_*ach 22

float可以通过请求Python的大小sys.float_info.但是,在许多不同的架构上,我从未遇到过64位以外的任何东西.

NumPy数组的项可能具有不同的大小,但您可以检查它们的大小,以字节为单位a.itemsize,其中a是NumPy数组.

  • sys.float_info包含许多有趣的属性,但float的大小不是其中之一 (22认同)
  • "*Python浮点数的大小可以通过`sys.float_info.*"与"*来实现.*大小不是由Python*直接公开".Python不会暴露大小的位数并不是你的错,但是当你真正挥舞你的手时,你假装给出一个事实答案是你的错. (11认同)
  • OP明确地询问了比特大小,32或64,你不能从float_info恢复比特大小,除非你想根据指数范围和尾数长度做一些疯狂的猜测 (5认同)
  • 考虑到任意浮点格式可能具有从`sys.float_info`看不到的奇偶校验位,填充或其他奇怪现象,您无法从那里确定浮点数的大小.如果你假设唯一的选项是IEEE754 binary32和binary64,这很简单,但如果你假设那么多,你可以假设二进制64而不是检查.当然,当Python浮动附加了如此多的对象开销时,底层C双打的内存大小并不意味着那么多,并且NumPy dtypes正好占据了他们所说的空间(当打包在数组中时). (2认同)

den*_*nis 10

numpy.finfo列出尺寸和FLOAT32的其他属性...,包括
NEXP:比特数的指数,包括它的符号和偏差.
nmant:尾数中的位数.
在具有IEEE-754 标准浮点的机器上,

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

将打印例如

float32 8 23
float64 11 52
float64 11 52
Run Code Online (Sandbox Code Playgroud)

(也可以试试float16和float128.)


ggg*_*ggg 6

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
---------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)


小智 5

浮点值的范围在sys.float_info对象中可用。

正如Sven所说,对于CPython float来说,它始终是64位的。但是Python的语言参考

您只能接受可接受范围的基础机器体系结构(以及C或Java实现)。”

因此,其他Python实现不一定是这种情况。