【发布时间】:2021-06-16 14:58:01
【问题描述】:
对不起,如果这是一个愚蠢的问题,我对 C 编程比较陌生。因此,我可能误解了一些关于变量/溢出的基本知识。
我做了这个简单的程序,我无法解释结果
#include <stdio.h>
#include <math.h>
int main() {
double number = pow(2, 1000);
printf("%f\n", number);
}
的该结果(用gcc编译)是一个巨大的数字,不应该适应型双的变量:10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376.000000 P>
通常当我尝试分配一个对于它的类型来说太大的常量时,编译器会给我一个错误。
所以我的问题是:这个数字是多少?为什么我没有收到任何错误?变量number 是否实际存储了这个值?说白了,怎么回事?
【问题讨论】:
-
这没有错。 2^1000是~1.07150860718627E+301,而double的上限是1.79769313486232E+308,那么它怎么能不适合double呢?
-
“是一个巨大的数字,永远不应该适合 double 类型的变量” - 你用什么方法来确定这个?你只是假设吗?
标签: c