5

我需要指定要从双精度值打印的字符串的确切长度,但我不想限制输出超出必要的范围。

用 printf() 格式化时,6 位精度双精度的最大长度是多少?

具体来说,我应该给 X in 什么值printf("%X.6lg",doubleValue);以确保没有值被截断?

我需要具体说明长度的原因是我正在定义一个 MPI 派生数据类型,它由许多双精度值的字符串表示形式组成,并且必须知道它们的确切长度才能在 MPI 进程之间划分文件区域。

我希望这很清楚。提前感谢您的回答。

4

3 回答 3

6

printf("%.6g", doubleValue)请注意,在printf("%.6Lg", doubleValue)

精度说明符中省略前导数字(“宽度”)对值的整数部分的长度没有要求。

另请注意,小写“l”将指定您的值是长整数。大写的“L”指定一个长双精度值。

另请注意,如果您不希望将其潜在地更改为科学记数法(如果它是更短的表示形式),那么您将使用“f”而不是“g”。

请参阅此处的 printf 参考

于 2009-06-18T14:04:38.060 回答
1

<float.h> 包含许多有用的值,其中 DECIMAL_DIG 是一个long double

同一个文件很可能会告诉您平台上的精度数超过 6 位...

PS:还要注意上面黛米的回答。他指出了您 printf() 中的各种缺陷,这些缺陷使我无法理解。

于 2009-06-18T14:03:56.660 回答
1

IEEE double 的最大指数是 1023,所以最大的 double 将是 1 + 1/2 + 1/4 + 1/8 + ... 等 * 2^1023。这将是大约 318 个字符长,以十进制表示。

为什么不使用“e”格式说明符?

于 2009-06-18T14:04:34.567 回答