gpt4 book ai didi

assembly - IEEE 754 非规范化十进制转换为半点二进制

转载 作者:行者123 更新时间:2023-12-02 19:56:47 26 4
gpt4 key购买 nike

我正在尝试将 0.0000211 转换为二进制。目前我的理解是这样的:

E = -偏差 + 1。偏差 = 15,E = -14

符号位和指数 = 0。

所以我有:

0 00000 ?????????

半点格式为 1 个符号位、5 个指数位和 10 个小数位。

我的问题是如何找到这个非规范化数字的分数?在这种情况下,E 和偏差意味着什么?任何帮助将不胜感激

注意:我需要能够在期末考试中手动执行此操作。

最佳答案

对 half、float 或 double 的尾数(OP?位)进行标准化以删除前导零。通常这样做直到数字为 1.0 <= number < 2.0。但在这种情况下,该数字处于次正常范围内(正如您已经建立的那样,指数为 00000。这意味着原始数字小于 6.10352 × 10^−5 的最小正常值,即当您尝试时移位以使数字 1.0 <= number < 2.0,您达到指数最小限制),在这种情况下,它们移位 15 次,即乘以 2^15 并在该点后存储尽可能多的位(对于半 float ,此是10位)。这样做意味着它们可以存储非常小的数字,因为对于次正常范围,它们在恢复数字时在尾数前面有一个隐含的 0,并且允许尾数上有前导零。

所以 0.0000211 = b'0.000000000000000101100001111111111100111...

2^15 * 0.0000211 = 0.6914048 = b'0.101100001111111111100111...

我们存储 1011000011,因为次正常范围删除了隐含的 0。(即,对于 0.XXXXXXXXXX,我们只存储 X)

因此,在这种情况下,尾数(OP?位)是 1011000011

sign   exp      mantissa
0 00000 1011000011

这可以通过 python 使用 numpy 和 struct 进行检查

>>> import numpy as np
>>> import struct
>>> a=struct.pack("H",int("0000001101010000",2))
>>> np.frombuffer(a, dtype =np.float16)[0]
2.116e-05

所以对于你的最后...至少您需要学习如何将小于 1.0 的小数转换为二进制,并记住一些规则。您似乎正在计算指数。

看看...

https://math.stackexchange.com/questions/1128204/how-to-convert-from-floating-point-binary-to-decimal-in-half-precision16-bits

这个问题的答案之一有整个转换的Python代码。这可能对学习有用。

关于assembly - IEEE 754 非规范化十进制转换为半点二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43881651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com