首页 文章

从大十进制数转换为浮点表示

提问于
浏览
0

我想我知道如何将十进制数转换为IEEE 754单精度浮点表示,但我想确定 .

我想在IEEE 754单精度浮点表示中表示3.398860921 x 10 ^ 18 . 我知道如何浮动代表 . 被打破了 .

第31位:符号(0表示,1表示 - )30-23位数:表示指数22-0位数:表示尾数(有效数字)

所以标志显然是0,因为它是一个正数 . 对于指数,我想出了这个(通过为偏差添加18到127)并将指数表示为:1001 0001

对于尾数,它将是3.398860921部分,我不断地将小数点右边的所有内容乘以2,如果它大于1,我标记为1,否则为0.然后取出新的答案并再次将所有内容乘以小数点右边2,直到我想出足够的位来填充尾数 .

所以现在我有:0 | 1001 0001 | 0110 0110 0001 1011 1011 111

因此,当我将其转换为HEX时,我得到0x48B30DDF,但这是一个不同于我在3.398860921 x 10 ^ 18开始的数字

这应该是那样的还是我在某个地方犯了错误?任何帮助将不胜感激 .

1 回答

  • 1

    您不能将十进制指数用于IEEE 754表示 . IEEE 754期望二进制指数,即当数字表示为1.xxx ... * 2p时的数字p .

    并且你不能使用十进制科学记数法直接转换为二进制的尾数是什么,因为它只对十进制指数有意义,你不能直接使用 .

    该算法将整个数字转换为二进制,然后,然后仅对有效数字转换为前导位后面的23位 . 对于指数,计算前导位的位置 .

    对于您的特定值3.398860921 x 1018,根据Wolfram Alpha,二进制表示为1.0111100101011001011011111111111101101001010010111101×261 .

    这意味着无偏指数为 61 ,省略前导位的暂定有效数为 01111001010110010110111 . 您可以将从十进制到浮点的转换错误计算为0.0000000000000000000000011111111101101001010010111101×261,并且由于此错误大于ULP的一半,除非您有理由倾向于向下舍入,否则应该按顺序添加一个有效数字获取最接近原始数字的单精度值,以十进制表示 .

相关问题