algorithm - 将小数转换为浮点二进制表示

标签 algorithm decimal ieee-754

假设我们有指数范围为 [-3,3] 且精度为 4 位的规范化 float 。下面你看到 4 个十进制数字和相应的二进制表示。如何将这些十进制数转换为二进制数?我知道如何从二进制转换为十进制,但反之则不然。

0.11 (decimal) = 1.000 * 2^-3 (binary)
3.1416 (decimal) = 1.101 * 2^1 (binary)
2.718 (decimal) = 1.011 * 2^1 (binary)
7 (decimal) = 1.110 * 2^2 (binary)

最佳答案

只要从尾数和指数的定义中出去。指数是最简单的部分。尾数不过是两个负幂的总和:1 + ½ + ¼ + ⅛ …,其中一些乘以 1,一些乘以 0。

要确定指数的值,请找到两个的最大幂,当除以(乘以 [0,1) 中的数字)时,给出范围 [1, 2] 中的值。

对于 0.11,它是 -4(不是你所说的 -3),因为 0.11 * 2⁴ = 1.76。 对于 3.1416,它是 +1,因为 3.1416/2¹ = 1.5708

然后您将在 [1,2) 范围内留下一个数字 m 以转换为二进制分数。以 r = "1"开头。结果,然后从 m 中减去 1,然后乘以 2。 如果结果大于1,则在r末尾写“1”,在m中减1,否则在r末尾写“0” 。继续乘以 2,并可选择从 m 中减去 1,同时将“0”和“1”写入 r,具体取决于您是否必须减去 1。当尾数中有足够的数字时停止。

我想你可以自己弄清楚如何进行所需的舍入模式。

关于algorithm - 将小数转换为浮点二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49490960/

相关文章:

c++ - 计算成本

asp.net-mvc - 如何在 IIS 6.0 中设置正确的小数点分隔符?

java - 从 Double.toLongBits 创建的 long 中获取 double

python - 如何可靠地将数字的小数部分和浮点部分分开?

algorithm - 四舍五入到给定基数的最接近整数幂

algorithm - 质因数算法的复杂度

algorithm - 区域之间的最短路线

C++ 将 float 转换为字符串

c - IEEE 754 : sqrtf() with fesetround(): different results between compilers: 0x42440a72 vs. 0x42440a73

floating-point - 逆向工程未知浮点格式