[PD] why does PD round numbers? (in tables, in messageboxes, etc)

Matteo Sisti Sette matteosistisette at gmail.com
Mon Apr 9 01:23:44 CEST 2012


On 04/08/2012 04:27 PM, katja wrote:

> I've once compiled (vanilla) Pd with the format specifiers changed to
> print up to 8 significant digits, and soon found why it is normally
> done with 6 digits max. You get things like this:
>
> 33 * 0.3 = 9.900001

That is completely unrelated. That is an issue intrinsic in floating 
point numbers.

Reducing the precision of numbers when writing them to files (or when 
parsing messages or whatever) is an issue in Pd.

One thing is rounding numbers for _displaying_ them, another thing is 
rounding them when _storing_ them (whether in a file or wherever).

Consider this: I create a patch like this:

[9.900001(
  |
[== 9.9]
  |
[print]

This prints 0, as expected.

Then I save and close it. I load it, and it has been transformed into this:

[9.9(
  |
[== 9.9]
  |
[print]

which obviously prints 1.

This is WRONG, there's no reason why it could be good or even 
acceptable. I do understand why it happens.


By the way, if you write into an object box:

[f 9.90001]

it is immediately changed into: [f 9.9]

Which is also WRONG (why shouldn't I be able to create an object with a 
parameter value which  _can_ be represented without loss of 
information?), but it is much "less wrong" than the previous case in 
that this is CONSISTENT. In this case, at least, "what you have is what 
you save" (note that "what you see" is not an issue).

The case of message boxes (not to mention arrays) is devastating, 
because you may not realise you're going to loose information until you 
save the patch, close and reopen it.



More information about the Pd-list mailing list