Non-integer modulo operation

by Richard Russell, November 2011

BBC BASIC, in common with several other languages (e.g. C), provides only an integer MOD operator as standard. That is, you can pass non-integer values to MOD but they will be truncated to integers before the operation is carried out. For example:

        PRINT 678.9 MOD 123.45

prints the value 63.

However the modulo operation is not fundamentally limited to integer values and occasionally it can be useful to have a version which will work with non-integers. In C this is provided by the fmod library function. An equivalent function in BBC BASIC can be implemented as follows:

        DEF FNfmod(x,y) = x - x DIV y * y

Now we can perform the following operation:

        PRINT FNfmod(678.9, 123.45)

and the value printed is 61.65.