[PD-dev] [float infinity] and [float -infinity]

Mathieu Bouchard matju at artengine.ca
Sun Jan 29 09:57:01 CET 2006


On Sat, 28 Jan 2006, Hans-Christoph Steiner wrote:

> I just had another idea for a handy thing when doing math: a method of
> getting the smallest and largest possible numbers.  Basically, the Pd
> version of a #define INFINITY 1e37 (or whatever it is).

Wow, I didn't recall infinity being so small!

The largest possible finite values are FLT_MAX and FLT_MIN, which are 
+/- 2^128*(1-2^23).

Infinity values could be computed using [1 0( -> [/] and [-1 0( -> [/].
NaN (Not a Number) could be computed using [0 0( -> [/]. That is, if Pd 
were IEEE-compliant...

However you can still compute +infinity using [2 666( -> [pow].

[expr] is not IEEE-compliant either, but according to it, log(0) is
-infinity and log(-1) is NaN, whereas according to Miller's [log], log(0) 
is -1000.

> I think it would be handy to have as part of [float], like this:
> [float infinity] and [float -infinity]

But those would be mere shortcuts for what you can already do with two 
boxes.

> (FLT_MAX and FLT_MIN) or maybe: [float max] and [float min] (FLT_MAX and
> FLT_MIN)

Please distinguish large finite values and infinite values.

> [float max_exp] (FLT_MAX_EXP)
> [float min_exp] (FLT_MIN_EXP)

what is nice about those things is that they would increase portability
between the current 32-bit float pd and a future 64-bit float pd.

However I don't like the fact that you can't use them everywhere.

If in [+ max_exp], max_exp is a float, then what does [symbol max_exp] do? 
How can those things work uniformly without having to add special code 
everywhere?

> And perhaps [int] could also have the relevant versions of the same too.  

It's not documented that [int]'s type is C's "int". Reading the helpfile, 
it could as well be implemented using C's truncf(). There is a difference: 
[2 666( -> [pow] -> [int] yields a negative number.

> [int infinity] and [int -infinity]
> or maybe:
> [int max] and [int min]

machine integer types don't have infinities, but they do have extrema.
The C type used by [int] is int, which goes from -2^31 to 2^31-1.

if [int] were using truncf(), [int]'s limits would be the same as
[float]'s limits.

There's also a t_int type defined in m_pd.h but [int] doesn't use it.

 _ _ __ ___ _____ ________ _____________ _____________________ ...
| Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju
| Freelance Digital Arts Engineer, Montréal QC Canada




More information about the Pd-dev mailing list