Domanda

Does anyone now if there is a maximum range for floats ? (I mean are there other specifications than IEEE754 or exotic platforms that use very large float representations).

I am wondering this since I got this error from a Semmle-based analyser:

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

Error: this conversion may yield a string of length 328, which exceeds the allocated buffer size of 200

where acKey is a local char array of size 200.

Thanks

È stato utile?

Soluzione

If the value of dDate is -0x1.fffffffffffffp1023, then the %f format specifier produces “-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000”, which contains 317 characters. Adding the ten other characters in the format string and the null terminator results in 328 characters.

-0x1.fffffffffffffp1023 is the greatest magnitude finite negative number representable in IEEE-754 64-bit binary floating-point. Although it is not represented with the precision suggested by the formatted decimal number, it does represent exactly that number.

(The C standard may allow a somewhat different display, such as showing zeros beyond a certain point instead of the exact digits. However, the number of digits displayed should be the same. A good C implementation will show all the exact digits.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top