Sorry, "reply" instead of "reply all" again.
Well, it seemed impossible to me, but here what I found in d_math.c (pd 0.40.0 or something, I'm a bit lazy to look for version):
static t_int *sigwrap_perform(t_int *w) { float *in = *(t_float **)(w+1), *out = *(t_float **)(w+2); t_int n = *(t_int *)(w+3); while (n--) { float f = *in++; int k = f; if (f > 0) *out++ = f-k; else *out++ = f - (k-1); } return (w + 4); }
Here it definitely says: if f <= 0 then return f - ((int f) - 1) = f - (int f) + 1 = frac(f) + 1 which is 1 for each non-positive int, of course, and assumes float-to-int conversions (int k = f) take 'neares to zero' which seems a dangerous assumption for me (I guess, it should return frac(f) + 1, where 0<=frac<1 for each negative number; perhaps, some compiler flags fix it, it depends on compiler, but for integers the result is always 1). I think, the whole situation is worthy a bug report.