[PD] reorg of puredata.info/docs/developer
Mathieu Bouchard
matju at artengine.ca
Thu Jul 7 16:27:07 CEST 2011
On Wed, 6 Jul 2011, Martin Peach wrote:
>>> (Also, someone could make this "an XXX bits float can store a YYY bits
>>> integer" a bit more clear as I personally still don't really understand
>>> it.
Numbers in pd's binary float format are made of three parts :
an int between 8388608 and 16777215 ;
a scale factor that is a power of two, such as 16, 8, 4, 2, 1, ½, ¼, ⅛,
1/16, etc ;
a sign which is either -1 or +1.
They all get multiplied together.
Thus if you have a number that is at least 1 but less than 2, it has to
have a scale factor of 1/8388608 (that is, downscaling by 23 levels). Thus
there are 8388608 float fractions from 1 to 2 (again not including 2).
A number from 8388608 to 16777215 has a scale factor of 1, thus there are
no fractions in that range. From 16777216 to 33554430 there are no odd
numbers anymore, and in the next range, there are only multiples of 4,
etc.
> It's worse than that though. Pd uses the %g format specifier when it
> writes out the pd patch (e.g. printf("%g", number)), so floats get
> simplified.
Numbers in pd's decimal float format are made of three parts :
an int between 100000 and 999999 ;
a scale factor that is a power of ten, such as 1000, 100, 10, 1, 1/10,
1/100, 1/1000, etc ;
a sign that is either -1 or +1.
Thus for floats between 100000 and 999999 there are only integers, and
beyond that, you have only multiples of ten. Between 1 and 10, there are
900000 numbers (not including 10 itself).
Other binary and decimal float formats mostly only differ by number of
digits in the «first» part of the number. So-called «double» floats use
ints between 4503599627370496 and 9007199254740991, but this amount of
precision is not available as part of pd messages.
_______________________________________________________________________
| Mathieu Bouchard ---- tél: +1.514.383.3801 ---- Villeray, Montréal, QC
More information about the Pd-list
mailing list