On Wed, 2016-12-14 at 11:18 +0100, Henri Verbeet wrote:
On 14 December 2016 at 11:02, Hans Leidekker hans@codeweavers.com wrote:
On Wed, 2016-12-14 at 10:20 +0100, Henri Verbeet wrote:
On 13 December 2016 at 20:17, Austin English austinenglish@gmail.com wrote:
/* buf was originally [24], increased to 48 to prevent a stack smashing error when running tests under Valgrind */
unsigned char buf[48]; /* "-1.1111111111111111E-308". */
The more interesting comment would perhaps be what actually happens and why this helps.
Valgrind doesn't really support 80-bit floating point arithmetic: http://www.valgrind.org/docs/manual/manual-core.html#manual-core.limits
That mentions limitations wrt. precision, rounding and fp exceptions, but from that page it's not obvious to me how that results in the mentioned stack corruption.
I didn't debug this (and I don't feel like it to be honest) but there are loops in the formatting code which terminate depending on the precision and rounding of long double operations. Valgrind can't match the precision of hardware because it uses 64-bit numbers internally to represent long doubles.