0乘以浮点数

时间:2011-10-18 09:19:18

标签: numbers floating-point

如您所知,单号将按以下格式保存在内存中: (-1)^s * 1.f * 2^e: 零将保存:1.0000000000000000 * 2 ^ -126

现在如果我将它乘以另一个浮点数,如3.37 (-1) ^ 0 * 1.10101111 * 2 ^ 128 它不是现实,但在计算机中它将是0,如何以及为什么?

5 个答案:

答案 0 :(得分:3)

正如here (Wikipedia, sorry ...)所指出的,指数的特殊值有不同的处理方式。如果指数为零,则计算数字值的公式为

(-1)^s * 0.f * 2^(-126)   # notice 0.f instead of 1.f for other exponents

因此,浮点零只有所有位都设置为零(即f=0, s=0, e=0)。当然,乘法算法必须处理这个“特殊”指数,并在这种情况下将结果设置为零(更具体地说,相应地为+ Zero或-Zero ......)

答案 1 :(得分:2)

零(通常)是浮点表示中的一种特殊情况,在IEEE浮点数中,零表示为0.0 * 2 ^ -126(或无论指数是什么 - 它实际上无关紧要。)

答案 2 :(得分:2)

我会说cpu的数学单元对“特殊”浮点数有一些优化,比如NaNInfinity0(请注意技术上的IEEE二进制fp有两个0,一个正面和负面的一个),并知道在这三种情况下该做什么。

如果您有兴趣,请在这里http://steve.hollasch.net/cgindex/coding/ieeefloat.html有一个表格,显示当您将两者之间的“特殊”数字相加/相乘时会发生什么。

答案 3 :(得分:0)

为什么:浮点数设置不像数学中的R设置那样连续。因此,有些nubers无法正确显示并四舍五入到可能的可视化数字

如何:它被舍入:)

答案 4 :(得分:-2)

舍入错误。计算机是有限的