【发布时间】:2011-11-14 09:00:41
【问题描述】:
代码:
#iclude <math.h>
int main(){
double somenumber = pow(2, 1000);
printf("%lf\n", somenumber);
return 0;
}
我得到了这个巨大的数字: 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376 P>
这显然对双倍来说太大了。它是如何工作的?
【问题讨论】:
-
我很高兴您能看一眼一个数字并判断它是否太大而无法放入双人床。我不能。
-
如果我在一个知道列宽的终端上查看它,我可以除了边界情况... :-)
-
浮点表示
.点的位置浮动(c.f.定点)对于双精度点可以浮动多达2^-1022到2^1023。但是,提示就在名称中。 -
@Peter Lawrey:2^-1074 是下限,而不是 2^-1022。 2^-1074 和 2^-1022 之间的数字可以用 IEEE 754 格式表示,但作为非规范化数字。
-
“这显然对 double 来说太大了” - 不,不是(尤其不是明显 ;))