C规格中float的最大位数

时间:2013-12-09 14:16:27

标签: c printf ieee-754

如果有浮动的最大范围,现在有人吗? (我的意思是有除IEEE754之外的其他规范或使用非常大的浮点表示的外来平台)。

我想知道这是因为我从基于Semmle的分析仪得到了这个错误:

sprintf(acKey, "Equity(0,%f)", dDate);

错误:此转换可能会产生长度为328的字符串,超过分配的缓冲区大小200

其中acKey是一个大小为200的本地字符数组。

由于

1 个答案:

答案 0 :(得分:3)

如果值dDate-0x1.fffffffffffffp1023,则%f格式说明生产“-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000”,它包含317个字符。在格式字符串和空终止符中添加其他十个字符会产生328个字符。

-0x1.fffffffffffffp1023是IEEE-754 64位二进制浮点中可表示的最大幅度有限负数。虽然它没有用格式化的十进制数表示的精度表示,但它确实代表了这个数字。

(C标准可能允许稍微不同的显示,例如显示超过某一点的零而不是确切的数字。但是,显示的位数应该相同。一个好的C实现将显示所有的确切数字。)