【发布时间】:2015-05-02 06:14:49
【问题描述】:
我正在尝试将int 转换为自定义浮点数,其中用户指定为 exp 和尾数保留的位数,但我不明白转换是如何工作的。我的函数接受一个 int 值和 int exp 来表示数字(值 * 2^exp),即 value = 12,exp = 4,返回 192。但我不明白我需要做些什么来改变这些。几天来我一直在研究这个并使用 IEEE 转换器网络应用程序,但我只是不明白规范化过程是什么。就像我看到它“移动二进制点并调整指数”但我不知道这是什么意思,谁能给我一个例子吗?我也不明白指数偏差是什么。我拥有的唯一信息是您只是在指数中添加了一个数字,但我不明白为什么。我一直在谷歌上搜索一个我能理解的例子,但这对我来说没有任何意义
【问题讨论】:
-
它是 0.01 --> 1e-2 IOW 的二进制等价物:将尾数右/左移动并将计数加/减到指数。
-
如果值为 12,并且我们将其设为二进制值,则为
00001100。这需要转移到11000000 x 2^-4,然后我们忘记最左边的位(因为它“总是”1),只是说这是[1]1000000 x 2^-4。 -
你能澄清一下“我不明白我需要做什么来改变这些”的意思吗?你的意思是当你做加法/乘法时你不确定如何改变它们?
-
@eigenchris 就像我如何取十进制 12,并使其成为标准化尾数,然后相应地调整 exp 部分
-
@U2EF1 那么我怎么知道它需要转移多少次?就像用户为尾数指定 4 位,并且值为 3,我怎么知道将 0011 移到 1000?我可以像 get max_val = pow(2,
)-1 然后将 value(0011) 向右移动直到 value > max_val 之类的东西,并让计数器记录我这样做的次数吗?
标签: c floating-point double normalization