我正在尝试理解这是如何计算的:
一种表示数字的计算机程序,如下所示:1位表示整体符号,5位表示指数,20位表示尾数。显然,我们需要使用偏差来表示正数和负数。在此基础上,我如何计算机器精度和最大可能数?
发布于 2013-08-30 19:09:33
获得想法的一种方法是测试程序何时舍入为零。你可以用python编写这段代码。
N = 52
a = 1.0-2**(-N);
print "%1.25f" % a尝试不同的N值。当打印输出中最低的N为0时,它将指示使用多少位来表示有效位。print语句是为了确保程序真正将数字视为零,而不仅仅是显示零。
发布于 2013-08-30 21:06:02
假设您使用的是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之间。但是,这两个极值都是为异常保留的(次正态数、无穷大和NANs),称为非规范化数。因此,
(1+2^(-m)*significand)的最小值为1,最大值为2-2^(-m) (在您的示例中为2-2^(-20),近似为总指数exponent-bias的最小非异常值为-2^(e-1)+2 (在您的示例中为-14),最大值为2^(e-1)-1 (在您的示例中为:15)。所以事实证明:
2^(-2^(e-1)+2) (在您的情况下为2^(-14),近似最大为(2-2^(-m))*(2^(2^(e-1)-1)) (在您的情况下为(2-2^(-20))*(2^15),近似为65535,96875).至于“机器精度”,我不知道你的意思是什么,但有人称m+1 (这里是21)为二进制精度,十进制数字的精度是log10(2^(m+1)),对你来说这大约是6.3。
我希望我没弄错什么,我不是这方面的专家。
https://stackoverflow.com/questions/18520449
复制相似问题