IEE754-浮点数表示

时间:2018-06-19 13:07:54

标签: floating-point ieee-754

我正在编写程序,该程序从输入中获取浮点数,然后输出该数字的十六进制表示形式。

我要解决的是:

  1. 将数字除以整数和小数部分。
  2. 将整数和小数部分转换为二进制表示形式。 a)整数除以2,如果数字mod2 == 1,则加1,否则加0。将整数转过来。 b)如果小数部分大于2,则将其乘以2,然后将其减去1,然后再次执行。
  3. 如果数字小于0,则符号为1,否则符号为0。
  4. 获取指数(127 +/- x),将其转换为二进制(整个)。
  5. 获取尾数。
  6. 将符号+指数+尾数转换为十六进制。

我的程序正在通过SPOJ论坛上进行的所有测试。我不得不寻找手动测试用例,使我自己无法通过。

因此,如果电话号码为-123123.2323,我会收到电话号码:

(hex)c7 f0 79 9d

二进制整体= 11110000011110011 二进制十进制= 0011101101111000000000 ....

Mantissa = 1110000011110011 0011101

同时https://www.h-schmidt.net/FloatConverter/IEEE754.html给了我

Mantissa = 1110000011110011 0011110

它如何工作?在这种情况下为什么要这样?当我将0.2323转换为二进制文件时,使用https://www.rapidtables.com/convert/number/decimal-to-binary.html?x=0.2323会给我0。 0011101 101111。在将整个二进制数(-1)加起来(最多23位)之后,我用这部分完成了尾数。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

0.2323和-123123.2323不完全等于任何IEEE-754浮点数。用来将其转换为二进制浮点表示形式的任何内容都需要选择要使用的精度,以及将其取整的方向。看起来您所使用的各种方法使这些选择有所不同。 / p>

答案 1 :(得分:0)

好的,这并不意味着我的程序或解决方案是错误的,只是我的思维过程而且我缺少有关浮点数的关键信息。

正如“ chux”先生所说,我尝试计算的数字(-123123.2323)应该由计算机读取为其他数字(-123123.2344)。因为我使用字符串作为输入并将数字简单地分为整数和小数部分,所以我看不到浮点数的限制。

解决方案是将数字读取为浮点数,让计算机更改其值,然后将其读取为字符串并对其进行处理。