【问题标题】:C pow() function printing gigantic numbers? [duplicate]C pow() 函数打印巨大的数字? [复制]
【发布时间】: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 是否实际存储了这个值?说白了,怎么回事?

【问题讨论】:

标签: c


【解决方案1】:

双精度像整数一样存储。这个页面解释了double are representated in memory

Double 包含 1 个符号字节,11 位用于指数,53 位用于有效精度。因此,您最多可以存储 1.7*10^308 的数字。因此,您的数字可以用双精度表示(尽管精度有限)。使用%f 打印时,您只会得到它的数值(近似值)。

【讨论】:

    【解决方案2】:

    在 C 中,double 类型可以容纳 300 多个十进制数字! double 存储在 8 个字节中,包含 2.3E-308 到 1.7E+308 范围内的数字(精确到小数点后 15 位)。

    参考:https://www.tutorialspoint.com/cprogramming/c_data_types.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-18
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多