C:通过printf()打印时双倍可以多长时间

时间:2009-06-18 13:52:54

标签: c printf mpi

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

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

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

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

我希望这很清楚。在此先感谢您的回答。

3 个答案:

答案 0 :(得分:6)

使用printf("%.6g", doubleValue)printf("%.6Lg", doubleValue)

请注意,在精度说明符中省略前导数字(“宽度”)不要求值的整数部分的长度。

另请注意,大写“l”将指定您的值为long int。大写“L”指定一个long double值。

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

请参阅printf reference here

答案 1 :(得分:1)

有< float.h>包含许多有用的值,其中包括DECIMAL_DIG,用于 long double

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

PS:还请注意Demi上面的回答。他指出你的printf()中的各种漏洞逃过了我。

答案 2 :(得分:1)

IEEE双精度的最大指数为1023,因此最大双精度为1 + 1/2 + 1/4 + 1/8 + ...等* 2 ^ 1023。这将是大约318个字符长,十进制表示法。

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