我试图了解这是如何计算的:
表示数字的计算机程序,如下所示:整体为1位 符号,指数为5位,尾数为20位。显然,我们需要使用偏差来表示正数和负数。基于此,我将如何计算机器精度和最大可能数?
答案 0 :(得分:0)
获得想法的一种方法是测试程序何时舍入为零。你可以在python中使用这段代码。
N = 52
a = 1.0-2**(-N);
print "%1.25f" % a
尝试不同的N值。当打印输出给出最低N的零时,它将显示有效位的使用位数。 print语句是为了确保程序真正将数字视为零,而不仅仅显示零。
答案 1 :(得分:0)
假设您使用的是IEEE标准,则表示数字的公式为:
number = sign*(1+2^(-m)*significand)*2^(exponent-bias)
其中m
是用于存储(整数)有效数字(或尾数)的位数,bias
等于2^(e-1) - 1
,其中e
是数字用于存储指数的位数。
让我们看看我们可以从中得到什么。注意
significand
的值介于0
和2^m - 1
之间(在您的情况下:0到1048575之间)。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。
我希望我没有弄错,我不是这方面的专家。