对于存储在 x 中的double值, buffer 需要在下面的函数调用中有多大?
sprintf(buffer, "%.*g", DBL_DIG, x);
答案 0 :(得分:5)
最糟糕的情况是:
-
.
e+999
(*)因此缓冲区的大小应为DBL_DIG + 8
。
(*)根据[IEEE浮点数]上的维基百科页面,双重的指数部分最多为2 1023 < 10 308 。所以指数的十进制表示最多需要3位数。
当然上面的内容只对符合IEEE754标准的浮点实现有意义(感谢Basile Starynkevitch注意)
答案 1 :(得分:0)
您最好使用snprintf
代替sprintf
;我猜以下可能(几乎总是)安全
char buf[32+2*DBL_DIG];
snprintf(buf, sizeof(buf), "%.*g", DBL_DIG, x);
或者只是char buf[48];
我很惊讶你在问。你为什么这么关心?
BTW,大多数C(但原则上不是全部)实现使用IEEE754。请参阅floating point guide。