The double precision testing thread leads me to comment on an external I've been writing. I decided I needed an external (with 32-bit signals input) that would add up blocks of signals over time with an internal 64-bit accumulator to avoid losing precision during this step.
But as I thought about other options for it to perform (sample-wise accumulation, sum of squares, whether the output should be normalized), it started turning into a real swiss army knife, one object with a ton of configuration choices, outputs, and control options. It could be used to read long tables with tabread4~~ for instance, or turn distributions into normalized cumulative distribution functions. There would be the option of retrieving the full 64-bit value on the output through pairs of signals/messages or truncating the precision back to 32-bits with a single output.
When signals fan in to a inlet they are summed together in 32-bits, so that has to be avoided. Should I have it use a variable number of inlets or make new objects that have multiple inlets?
Yikes... what am I doing? Is there a different question here? What set of 64-bit externals could do all the things a double-precision Pd *could* do? You only really lose precision when doing certain things. Is there a better way to organize the functions for usage among several objects? Which ones are essential? What set would make it complete? Yikes...
In the same manner as the PdCUDA signal memory space and perform routine duplication (I designed but never published an implementation), you could control whether objects used a 32-bit signal memory space and dsp functions vs a 64-bit version of the same. You'd control the behavior through the dspcontext struct and add an object to switch it on/off in subpatches, thus using the double precision only when you need it. Array design and implementation remains problematic. This is a terrible idea.
I'll go ahead and build something for my immediate usage (after my classes conclude in 2 weeks) that does just a few things, but I have to wonder if there's something better there that should be done instead. Any advice?
Chuck