对于存储在x中的double值,缓冲区需要在下面的函数调用中有多大?
sprintf(buffer, "%.*g", DBL_DIG, x);
Run Code Online (Sandbox Code Playgroud)
最糟糕的情况是:
-
数字,如果是负数.
e+999
(*)所以缓冲区的大小应该是DBL_DIG + 8
.
(*)根据[IEEE浮点数]上的维基百科页面,双精度的指数部分最多为2 1023 <10 308.所以指数的十进制表示最多需要3位数.
当然上面的内容只对IEEE754兼容的浮点实现有意义(感谢Basile Starynkevitch注意到)