the normal case is that you want to calculate only int OR float and not both.
and if objects would do a typcheck in [/ 2] they would not only need more CPU,
but they would also not know what to do when you send "7.0" into the left inlet
after you sent a new divisor of "3" before - or which of the inlets would like to
set the objects´ mode? 7/2.5 = 3 and 7.0/2 = 3.0 ? ...
furthermore, imagine how your patch would read when [/ 2 ] would return the
same type as [/2.7] is doing.
dont forget that any float argumented object also takes ints and converts them,
and every float object takes ints and truncates them.
so you can use [/ 2.] at any time to do 8/2=4.0 when you need 4 (int) at the
output, because 4.0 will work with the next int object just fine (except [umenu]
or [vst~] mabye)
after 17 edits i am now finished 110ing this post together.
The "save CPU" aspect is still valid to some extent because the format [* ] vs. [* 1.] determines which type of operation (integer vs. float) will be used. So it's not necessary to derive the operation type at runtime from the input types which may save some CPU cycles. But from the users view, I find it rather inconvenient.
yeah what is used, but they _take both. i am probably not a programmer enough
to have the right picture about how much of a difference it makes to do typecheck
vs "just taking" two different types and route them to different processes.
When Max was young, there was a huge performance difference between integer math and floating point math. As processors have gotten better, this difference has at least been reduced, and perhaps has largely gone away. The trouble is that at this point, it couldn't really be changed without potentially breaking thousands of patches.
I for one think it's best to have to be explicit. Yes, I've been stung by this too (or stung myself, more accurately), and spent considerable time trying to figure out the problem, only to discover a truncation somewhere. But I wouldn't change it for anything, because all you need to do is be specific everywhere you need to be. It also makes you be really sure about what you're doing mathematically and why.
@jamesson: There should be no objects that change them "arbitrarily" from floats to ints etc. They do what their arguments or their incoming values tell them to do, and if they don't, it's a bug. Is this what you found?