0

我试图了解这是如何计算的:

表示数字的计算机程序如下:总符号 1 位,指数 5 位,尾数 20 位。显然我们需要使用偏差来表示正数和负数。基于此,我将如何计算机器精度和最大可能数量?

4

2 回答 2

0

获得想法的一种方法是测试程序何时归零。您可以在 python 中使用此代码。

N = 52
a = 1.0-2**(-N); 
print "%1.25f" % a

尝试不同的 N 值。当打印输出的最低 N 为零时,它会告诉您有多少位用于有效位。print语句是为了保证程序真的把数字看成零,而不是只显示零。

于 2013-08-30T11:09:33.227 回答
0

假设您使用的是 IEEE 标准,则数字表示的公式为:

number = sign*(1+2^(-m)*significand)*2^(exponent-bias)

其中m是用于存储(整数)有效位(或尾数)的位数,并且bias等于是用于存储指数的位数2^(e-1) - 1e

让我们看看我们能从中得到什么。注意

  • significand之间的范围值(在您的情况下:0 到 1048575 之间)。02^m - 1
  • exponent范围 和 之间0的值2^e - 1。但是,这两个极值都是为例外(次正规数、无穷大和 NAN)保留的,称为非标准化数。

最后,

  • 小数部分的最小值(1+2^(-m)*significand)是 1,最大值是2-2^(-m)(在您的情况下为 2-2^(-20),大约为 1,999999046)。
  • 总指数的最小非异常值exponent-bias-2^(e-1)+2(在您的情况下为 -14),最大的是2^(e-1)-1(在您的情况下:15)。

所以事实证明:

  • 可以表示的最小(正)标准化数是2^(-2^(e-1)+2)(在您的情况下为 2^(-14),大约为 0,000061035)
  • 最大的是(2-2^(-m))*(2^(2^(e-1)-1))(在您的情况下为 (2-2^(-20))*(2^15),大约为 65535,96875)。

至于“机器精度”,我不确定您的意思,但有人称m+1(此处为 21)二进制精度,十进制数字的精度为log10(2^(m+1)),对您而言,这大约是 6.3。

我希望我没有做错什么,我不是这方面的专家。

于 2013-08-30T13:06:02.233 回答