如何在C中打印巨大的十进制数?

如何在C中打印巨大的十进制数?,c,floating-point,C,Floating Point,我有一个存储巨大值的变量,比如0.111111 21323532534,但我不知道如何整体打印它,我找到了printf('.30g',variable)的用法,但不知道它是如何工作的。这是输出此变量的唯一方法吗?它为什么工作?在C中,用于打印目的的默认浮点精度是六位数。这相当于: printf("%.6f", variable) 为了在小数点后显示6位以上的数字,您必须按照您所做的那样格式化数字。但是,您使用了“%g”格式类型,该格式返回浮点(%f)或科学符号(%e)格式

我有一个存储巨大值的变量,比如
0.111111 21323532534
,但我不知道如何整体打印它,我找到了
printf('.30g',variable)
的用法,但不知道它是如何工作的。这是输出此变量的唯一方法吗?它为什么工作?

在C中,用于打印目的的默认浮点精度是六位数。这相当于:

printf("%.6f", variable) 
为了在小数点后显示6位以上的数字,您必须按照您所做的那样格式化数字。但是,您使用了“%g”格式类型,该格式返回浮点(%f)或科学符号(%e)格式中较短的一种

除此之外,一个double只能准确地表示总共15/16个数字,而不管小数点是多少,分配的大小为8字节(符号为1位,指数为11位,尾数为52位),这样您就可以大部分地表示小于2^53的数字

printf("%.15f", variable) 

上述方法同样有效,允许在小数点后最多显示15位数字。

但不知道它是如何工作的-使用它需要知道什么?这还不清楚,但很可能需要了解浮点类型的精度。除此之外,创建一个实例,说明实际和预期的行为。那么这个数字的“巨大”是什么呢
0.111111 21323532534
?它有17个有效数字,这超出了使用普通类型
double
精确表示的范围,但除此之外,它不是一个大数字!“C中的默认浮点精度为六位数”更像是“对于打印,C中的默认浮点精度为小数点后的六位数”
double
编码有53位有效精度的二进制数字,相当于17位十进制数字的精度。是的,为打印指定该数字可能更好,谢谢。答案中已经提到的其他注意事项,尽管大多数小于2^53的数字可能用双精度表示,因此
17
数字已经超过了通常用普通
double
准确表示的数字。