lid55
MidiFire Beta
Posts: 75
|
Post by lid55 on Oct 6, 2024 6:01:41 GMT
Hi there, was trying to get some Math rules going... and to avoid decimals was trying to use temporary scaling (multiply by $1000 for example, then divide by $1000 later on). I'm running into some issues though. Is there a max decimal number that can be used in the Mat(h) rules?
|
|
|
Post by redheronmusic on Oct 6, 2024 13:59:57 GMT
SB is all integer math.
All arrays except the precision array are 16 bit, which means
Decimal 0 to 65535 Hex 0 to FFFF The precision array is 32 bit (signed), which means
Decimal - 2,147,483,648 to + 2,147,483,647 Hex 8000 0000 to 7FFF FFF But as you observed, you can do floating point work if you keep track of the decimal place.
Addition is straight forward, but remember if you multiply you add the number of decimals in each multiplicand.
Example - 10.03 x 3 if working with two decimal places is 1003 x 300 = 300900. Then divide by 10000 to get final answer = 30.09 - or you can do 1003 x 3, then you only need to divide by 100 to get answer
|
|
lid55
MidiFire Beta
Posts: 75
|
Post by lid55 on Oct 7, 2024 2:09:32 GMT
Great, thanks redheronmusic! All great information. I searched the forum here to see how to implement a precision array, but only found an example for SySex which has different bytes... do you know if I can use a precision array with just straight math calcs? (and really large numbers)
|
|
lid55
MidiFire Beta
Posts: 75
|
Post by lid55 on Oct 7, 2024 4:09:48 GMT
Ok finally found in the manual for precision array to have the letter P before the regular array number… but why wouldn’t you want all arrays to have the capabilities of precision arrays? memory? speed of processing?
|
|
|
Post by redheronmusic on Oct 7, 2024 11:37:16 GMT
Since most MIDI happens between 0-127, the normal 16 bit arrays provide plenty of precision.
|
|
lid55
MidiFire Beta
Posts: 75
|
Post by lid55 on Oct 7, 2024 17:30:04 GMT
Ah I see... so overkill for most of what happens through MidiFire, ok fair enough.
I ran into another limitation it seems... can't use precisions arrays in calculations sometimes?
_____ #calc 1 does not work
ASS PL1 = $4000000 Log PL1 PL1 +D ASS PL2 = $2000 Log PL2 PL2 +D
mat PL3 = PL1 / PL2 Log PL3 PL3 +D
#calc 2 works
mat PL4 = $4000000 / $2000 Log PL4 PL4 +D
even with small values this does not work...
|
|
lid55
MidiFire Beta
Posts: 75
|
Post by lid55 on Oct 7, 2024 21:28:55 GMT
Ah... ok think I got it now... I read in the manual "prefixed by P" as adding to an array already there (I,J,K,L)... so was adding "P" before each of those... but the deal is simply to use "P" as its own array... now it all works!
|
|
|
Post by redheronmusic on Oct 8, 2024 21:16:52 GMT
With PL3 you were doing an indirect lookup, addressing the item in the P array identified by L3 or P(L3).
Is why you were not getting an error - is a valid construct, just not what you wanted.
|
|