【问题标题】:How to print huge decimal number in C? [closed]如何在C中打印巨大的十进制数? [关闭]
【发布时间】:2021-02-24 15:32:05
【问题描述】:

我有一个像0.11111121323532534 这样存储巨大值的变量,但我不知道如何将它作为一个整体打印,我发现了printf('%.30g', variable) 的用法,但不知道它是如何工作的。它是输出这个变量的唯一方法吗?它为什么起作用

【问题讨论】:

  • 但不知道它是如何工作的 - 你需要知道什么才能使用它?
  • 这还不清楚,但很可能您需要了解浮点类型的精度。除此之外,创建一个minimal reproducible example 并说明实际和预期的行为。
  • 那么0.11111121323532534这个数字有什么“大”?它有 17 位有效数字,这比使用普通类型 double 准确表示的要多,但除此之外,它并不是一个大数字!

标签: c floating-point


【解决方案1】:

C 中用于打印的默认浮点精度为六位。相当于:

printf("%.6f", variable) 

为了在小数点后显示 6 位以上的数字,您必须按照您所做的那样格式化数字。但是,您使用了“%g”格式类型,它返回较短的浮点数 (%f) 或科学记数法 (%e ) 格式。

除此之外,无论小数点如何,一个双精度数最多只能准确表示大约 15/16 个数字,分配的大小为 8bytes(符号为 1 位, 11 代表指数,52 代表尾数),让您能够主要表示小于 2^53 的数字。

printf("%.15f", variable) 

上述方法也可以,并且允许在小数点后最多显示 15 位。

【讨论】:

  • “C 中的默认浮点精度为六位”更像是“用于打印,C 中的默认浮点精度为六位小数点后”。 double 编码具有 53 位有效精度的二进制数字,类似于 17 位十进制数字精度。
  • 是的,最好指定用于打印,谢谢。答案中已经存在的其他考虑因素,尽管主要是小于 2^53 的数字可能用双精度表示,所以 17 数字已经超过了您通常可以使用普通 double 准确表示的数字。
猜你喜欢
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 2013-03-31
  • 2017-05-19
相关资源
最近更新 更多