QB64 Phoenix Edition

Full Version: Operator MOD
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8
Hello
How to replace MOD to get correct results.
I have been using the MOD for a long time without problems. The problems started with negative values.

(-1 MOD 5) => (-1)
(-1.4 MOD 5) => (-1)
(1.4 MOD 5) => (1)
(-7. MOD 5) => (-2)
(-7.1 MOD 5) => (-2)

All results are incorrect.

Regards - Chris
Chris, what am I missing?

Code:
PRINT "      Equation            Result    -1=True | 0=False"
PRINT
PRINT "(-1 MOD 5) >= (-1)", (-1 MOD 5), (-1 MOD 5) >= (-1)
PRINT "(-1.4 MOD 5) >= (-1)", (-1.4 MOD 5), (-1.4 MOD 5) >= (-1)
PRINT "(1.4 MOD 5) >= (1)", (1.4 MOD 5), (1.4 MOD 5) >= (1)
PRINT "(-7 MOD 5) >= (-2)", (-7 MOD 5), (-7 MOD 5) >= (-2)
PRINT "(-7.1 MOD 5) >= (-2)", (-7.1 MOD 5), (-7.1 MOD 5) >= (-2)


All equations produce true results.

MOD utilizes integer division and reports the remainder.

Pete
This is another operator that will give the correct results?

Chris
What do you consider to be correct results?

5 MOD 5 = 0
4 MOD 5 = 4
3 MOD 5 = 3
2 MOD 5 = 2
1 MOD 5 = 1
0 MOD 5 = 0
-1 MOD 5 = 4
-2 MOD 5 = 3
-3 MOD 5 = 2
-4 MOD 5 = 1
-5 MOD 5 = 0
-6 MOD 5 = 4
-7 MOD 5 = 3

^Is that the patten/results you're looking for?

If so, then just do something simple like:

FUNCTION ModAll&& (number as _INTEGER64, number2 AS LONG)
    temp&& = number MOD number2 
    IF temp&& < 0 THEN temp&& = temp&& + number
    ModAll = temp&&
END FUNCTION
That's exactly what I mean.

It cannot be done without the function ?.

Chris
MOD often require some user adjustments, such as coding a function, to fit specific desired patterns.

As far as a different keyword to get what want, none that I'm aware of.

Pete
To the creators of QB64. Can we expect in the near future that a new operator to solve this type of computation will be planted into QB64?

Chris
But Steve's function is good enough, why try to force a BASIC dialect into a "new" implementation of a function that is mathematically sound?
Here it is without a new function:
Code:
DefInt A-Z
n = 5
For i = 10 To -10 Step -1
    If i < 0 Then
        copy = i
        While copy < 0
            copy = copy + n
        Wend
        Print copy Mod n
    Else
        Print i Mod n
    End If
Next
(11-27-2022, 08:30 PM)Chris Wrote: [ -> ]To the creators of QB64. Can we expect in the near future that a new operator to solve this type of computation will be planted into QB64?

Chris

I doubt it.  What you're seeing is just the nature of MOD.  Sometimes you just have to roll your own functions, if the built in ones don't fulfill all your needs.
Pages: 1 2 3 4 5 6 7 8