Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Operator MOD
#1
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
Reply
#2
Chris, what am I missing?

Code: (Select All)
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
Reply
#3
This is another operator that will give the correct results?

Chris
Reply
#4
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
Reply
#5
That's exactly what I mean.

It cannot be done without the function ?.

Chris
Reply
#6
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
Reply
#7
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
Reply
#8
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?
Reply
#9
Here it is without a new function:
Code: (Select All)
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
  724  855  599  923  575  468  400  206  147  564  878  823  652  556 bxor cross forever
Reply
#10
(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.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Problem with "MOD" Kernelpanic 5 1,021 01-06-2025, 02:37 AM
Last Post: Pete
  Ternary operator Kernelpanic 8 1,803 10-31-2023, 03:36 PM
Last Post: Kernelpanic
  DAY 023: MOD Pete 0 416 12-03-2022, 06:08 PM
Last Post: Pete
  qbs_str my mod Jack 9 1,959 04-20-2022, 03:22 PM
Last Post: admin

Forum Jump:


Users browsing this thread: 1 Guest(s)