如果有浮动的最大范围,现在有人吗? (我的意思是有除IEEE754之外的其他规范或使用非常大的浮点表示的外来平台)。
我想知道这是因为我从基于Semmle的分析仪得到了这个错误:
sprintf(acKey, "Equity(0,%f)", dDate);
错误:此转换可能会产生长度为328的字符串,超过分配的缓冲区大小200
其中acKey是一个大小为200的本地字符数组。
由于
答案 0 :(得分:3)
如果值dDate
为-0x1.fffffffffffffp1023
,则%f
格式说明生产“-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000”,它包含317个字符。在格式字符串和空终止符中添加其他十个字符会产生328个字符。
-0x1.fffffffffffffp1023
是IEEE-754 64位二进制浮点中可表示的最大幅度有限负数。虽然它没有用格式化的十进制数表示的精度表示,但它确实代表了这个数字。
(C标准可能允许稍微不同的显示,例如显示超过某一点的零而不是确切的数字。但是,显示的位数应该相同。一个好的C实现将显示所有的确切数字。)