[PD-dev] pd file format: color settings

Martin Peach martin.peach at sympatico.ca
Tue Feb 16 14:36:17 CET 2010


Martin Peach wrote:
> Yes but why? You can accurately represent every 32-bit int with a float, 
> but Pd clips them by using the %g format specifier to print them, 
> instead of %f.
> 

Ooops not true, only up to 24 bits are exact, after that integers
increment by increasing powers of two; but using %g to format floats
loses precision before that compared to %f.


> In m_atom.c, at line 68, the function atom_string() converts atoms into 
> strings, and in the case of float atoms, uses this line to do it:
> 
> sprintf(tbuf, "%g", a->a_w.w_float);
> 
> This prints both of the floats 16777215.0 and 16777214.0 as "167772e+7".
> It seems to me that
> 
> sprintf(tbuf, "%f", a->a_w.w_float);
> 
> would be better, since it prints 16777215.000000, 16777214.000000.
> 

Or even better a routine to clip off unnecessary trailing zeros and
decimal points:
int i;
i = sprintf(tbuf, "%f", a->a_w.w_float);
while ((--i > 0) && (tbuf[i] == '0')) tbuf[i] = '\0';
if tbuf[i] = '.' tbuf[i] = '\0';

I'll post this as a patch for atom_string() later today.

Martin






More information about the Pd-dev mailing list