# [PD] more about float limitation

Cyrille Henry ch at chnry.net
Thu Jan 29 19:04:05 CET 2015

```
Le 29/01/2015 18:36, Alexandre Torres Porres a écrit :
>  > more that 7 digit but less than 8 digits
> ...
>> so, 4/3 =! 1.33333
>> but 4/3 == 1.33333333 (8 "3")
>
> I don't get it. More than 7 decimal digits but less than 8 decimal digits?
yes
about 7.22 as Claude pointed : log(2^24-1)
2^24-1 is the max value coded in 23bit,
log(x) compute the number of digit of a number.
unfortunately, the result is not an integer.

>How does that work? In practice, is it 7 or 8?
in practice, number are rounded to the closest value that can be represented in this format.

the max number that can be represented without exponent is 2^24-1 (max value of 23bits)
i.e 16777215
in this case, 8 correct digits
if you add 1, it should be 16777216, but that need 24 bit, and it's not possible in a float.
so it's noted 1677722 * 10^1
...

>
> In the example we see that 4/3 == 1.33333333 (8 "3") - so it's 8 decimal digits...

better to say a 9 digit number.

>
> I have a work around using expr. Just put the number in parenthesis.
>
> Try [expr 4./3 == (1.33333333)] (8 "3")
>
> but the thing is that this is also true - [expr 4./3 == (1.3333333)] - also equal to 7 "3"
7 "3", mean 8 digits number: max precision of a float-> no surprise.

cheers
c

>
> cheers
>
> 2015-01-29 14:58 GMT-02:00 Cyrille Henry <ch at chnry.net <mailto:ch at chnry.net>>:
>
>     hello,
>
>     ok, claude was faster to answer, but since i already write my mail, i send it anyway...
>
>
>     pd internal resolution is float32.
>     (i.e, 23 bit, so a bit less than 17 millions, i.e more that 7 digit but less than 8 digits)
>     pd graphical representation is 6 digits
>
>     so, 4/3 =! 1.33333 but 4/3 == 1.33333333 (8 "3")
>     even if both are represented with the same number of 3...
>     this is a generic problem of computer float.
>
>     the only odd thing concerning pd is that number are also saved with 6 digit.
>     (so precision can be lost when a patch is saved)
>
>     try the attachment patch.
>     then save the patch, and open it back, and see that precision is lost.
>     (I have to modifies the patch as text file to have this behaviors, but you can also have the save precision when creating an object... until you save/load the patch)
>
>     you can also have a look on the top right of the patch: a weird effect of float precision...
>
>     cheers
>     c
>
>     Le 29/01/2015 17:17, Alexandre Torres Porres a écrit :
>
>         Well, thanks everyone.
>
>         And now for some related issues.
>
>         Pd can only represent up to 6 significant digits, so they say. For example, in a message, you can have a number with up to 5 decimal places, like: -5.29314e+12
>
>         but it does have a better internal resolution, if you compare 4 / 3 to 1.33333 you'll see 4 / 3 is higher ( try [expr 4./3 > 1.33333] and check).
>
>         So, what's this internal resolution? And why can't you have the same resolution in a message?
>
>         thanks
>
>         2015-01-28 16:06 GMT-02:00 Martin Peach <chakekatzil at gmail.com <mailto:chakekatzil at gmail.com> <mailto:chakekatzil at gmail.com <mailto:chakekatzil at gmail.com>>__>:
>
>              On Wed, Jan 28, 2015 at 12:00 PM, Cyrille Henry <ch at chnry.net <mailto:ch at chnry.net> <mailto:ch at chnry.net <mailto:ch at chnry.net>>> wrote:
>
>
>
>                  Le 28/01/2015 17:47, Alexandre Torres Porres a écrit :
>
>                        > it's a limitation of 32 bit float
>
>                      I thought so, but same happens when I use the new Pd Vanilla 64 bits...
>
>                  this mean that it's compiled for 64 bit CPU, not that float are store on 64 bits
>
>              Also last time I checked, Pd saves floats by first printing them to 6 digit precision, so they have even less range than a 'float' type.
>              You could use an object made with pdlua to manipulate large floating-point numbers, as there is no(?) limit to the size of a float in lua.
>
>              Martin
>
>              _________________________________________________
>         Pd-list at lists.iem.at <mailto:Pd-list at lists.iem.at> <mailto:Pd-list at lists.iem.at <mailto:Pd-list at lists.iem.at>> mailing list
>              UNSUBSCRIBE and account-management -> http://lists.puredata.info/__listinfo/pd-list <http://lists.puredata.info/listinfo/pd-list>
>
>
>

```