8

在 Python 程序中,我有以下两个值:

v1 = 0.00582811585976
v2 = 0.00582811608911

我的假设是 v1 是 64 位浮点值,而 v2 是 v1 转换为 32 位浮点值。我怎样才能验证这一点?

详细信息:
第一个值来自以 64 位精度计算的硬件板。该板将值发送到 PC,但它还应将值转换为 32 位精度并将其发送到另一块板,然后再将其发送到 PC。我只是想验证这是否真的发生了,而我所拥有的只是两个大数组。

4

2 回答 2

11

您可以使用struct 模块来玩数字表示:

import struct

>>> struct.unpack("f", struct.pack("f", 0.00582811585976))
(0.005828116089105606,)
于 2012-11-08T15:05:46.190 回答
8

看起来很有道理:

>>> v1 = 0.00582811585976
>>> v2 = 0.00582811608911
>>> import numpy as np
>>> np.float32(v1)
0.0058281161
>>> float(np.float32(v1))  #convert to 32bit and then back to 64bit
0.005828116089105606       #This rounds to v2 if you're printing 14 places of precision ...
>>> '%.14f'%np.float32(v1)
'0.00582811608911'
>>> '%.14f'%np.float32(v1) == '%.14f'%v2
True
于 2012-11-08T15:03:27.583 回答