C语言怎么判断位数:c语言中 100位数字的变量值(e to 100 digits)

关于C语言怎么判断位数的问题,在e to 100 digits中经常遇到, 所以我是 c 的新手,我刚刚了解了数据类型,让我困惑的是,例如 double 的值范围是从 2.3 E-308 到 1.7 E + 308,数学上是 100 位数 ∈ [2.3 E-308,1.7 E + 308]。

所以我是 c 的新手,我刚刚了解了数据类型,让我困惑的是,例如 double 的值范围是从 2.3 E-308 到 1.7 E + 308,数学上是 100 位数 ∈ [2.3 E-308,1.7 E + 308]。

#include <stdio.h>
int main()
{
double c = 5416751717547457918597197587615765157415671579185765176547645735175197857989185791857948797847984848;   
printf("%le",c);
return 0;
}

结果是 7.531214e + 18 通过改变% le 由% lf th 结果是 7531214226330737664.000000 不等于 c。

3

这个长数字实际上是long long类型的数值文字。但是由于此类型不能包含这样的长数字,因此它被截断模(LLONG_MAX + 1)并导致7531214226330737360

Demo. Edit:

@ JohnBollinger:...然后转换为 double,结果损失了几个(二进制)精度。

@ rici:Demo2-这里的常量是double类型,因为添加了小数点

1

看起来,如果我们可以将多达 10 的数字存储为 308 的幂,那么我们将存储 308 位左右的数字,但是在浮点运算中,情况并非如此。浮点数不会存储为巨大的数字串。

从广义上讲,浮点数存储为尾数-通常是 0 到 1 之间的数字-和指数-某个数的幂。不同类型的浮点数(浮点,双精度,长双精度)各自具有分配给尾数和指数的不同位数。这些位计数,尤其是在尾数中,控制着表示数字的精度。

大多数平台上的 double 给出 16-17 个十进制数字的精度,而不管大小(十的幂)。可以使用将算术运算到所需的任何精度的库,尽管此类功能未内置到 C 中。

另一个复杂的问题是,在您的示例中,您分配给c的数字实际上根本没有定义为浮点数。没有任何迹象表明它应该如此表示,编译器将其视为整数,并且由于它太大而无法容纳大多数平台上最大的整数类型,因此它被截断为整数范围。

1

你应该得到一个正确的编译器或启用警告。最近的 GCC,只有默认设置将输出以下警告:

% gcc float.c
float.c: In function ‘main’:
float.c:4:12: warning: integer constant is too large for its type
 double c = 5416751717547457918597197587615765157415671579185765176547645735175197857989185791857948797847984848;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请注意,它说integer,即整数,而不是浮点数。在 C 中,该形式的常数表示整数。除非后缀为U,否则它是适合的最大类型的有符号整数。但是,标准 C 和常见实现都没有足够大的类型来适应该值。因此,发生的是 [(C4.a)

如果整数常量不能由其列表中的任何类型表示,并且没有扩展的整数类型,则整数常量没有类型。

在算术中使用这种没有类型的整数常量会导致未定义的行为,即程序的整个执行现在毫无意义。

“修复”应该是在数字后面添加一个.

#include <stdio.h>
int main(void)
{
    double c = 54167517175474579185971975876157651574156715791\
85765176547645735175197857989185791857948797847984848.;
    printf("%le\n",c);
}

并运行它:

% ./a.out
5.416752e+99

请注意,即使这样,double也只能精确地平均约 15 个有效的十进制数字。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(80)
风变编程python:以编程方式禁用麦克风(how do you turn off microphone on iphone)
上一篇
Chrome好用的插件:Chrome插件(插件) javascript文件似乎是孤立的
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(28条)