web-dev-qa-db-fra.com

Différence entre les opérateurs mod et rem en VHDL?

Je suis tombé sur ces déclarations dans la programmation VHDL et je ne comprenais pas la différence entre les deux opérateurs mod et rem.

    9 mod 5
    (-9) mod 5
    9 mod (-5)
    9 rem 5
    (-9) rem 5
    9 rem (-5)
9
musicakc

Une façon de voir les différences consiste à exécuter une simulation rapide sur un banc de test, par exemple, en utilisant un processus comme celui-ci:

process is
begin
  report "  9  mod   5  = " & integer'image(9 mod 5);
  report "  9  rem   5  = " & integer'image(9 rem 5);
  report "  9  mod (-5) = " & integer'image(9 mod (-5));
  report "  9  rem (-5) = " & integer'image(9 rem (-5));
  report "(-9) mod   5  = " & integer'image((-9) mod 5);
  report "(-9) rem   5  = " & integer'image((-9) rem 5);
  report "(-9) mod (-5) = " & integer'image((-9) mod (-5));
  report "(-9) rem (-5) = " & integer'image((-9) rem (-5));
  wait;
end process;

Il montre que le résultat est:

# ** Note:   9  mod   5  =  4
# ** Note:   9  rem   5  =  4
# ** Note:   9  mod (-5) = -1
# ** Note:   9  rem (-5) =  4
# ** Note: (-9) mod   5  =  1
# ** Note: (-9) rem   5  = -4
# ** Note: (-9) mod (-5) = -4
# ** Note: (-9) rem (-5) = -4

Wikipedia - Opération Modulo A une description élaborée, incluant les règles:

  • mod a signe de diviseur, donc n dans a mod n
  • rem a un signe de dividende, donc a dans a rem n

L'opérateur mod donne le résidu d'une division arrondie vers le bas (division à étages), donc a = floor_div(a, n) * n + (a mod n). L'avantage est que a mod n est un graphique en dents de scie répété lorsque a augmente même jusqu'à zéro, ce qui est important dans certains calculs.

L'opérateur rem donne le reste de la division entière régulière a / n qui arrondit à 0 (division tronquée), donc a = (a / n) * n + (a rem n).

23
Morten Zilmer
For equal sign:
9/5=-9/-5=1.8 gets 1 
9 mod 5 = 9 rem 5
-9 mod -5 = -9 rem -5
-----------------------------------------
For unequal signs:
9/-5 = -9/5 = -1.8
In "mod" operator : -1.8 gets -2
In "rem" operator : -1.8 gets -1
----------------------------------------
example1: (9,-5)
9 = (-5*-2)-1  then:  (9 mod -5) = -1
9 = (-5*-1)+4  then:  (9 rem -5) = +4
----------------------------------------
example2: (-9,5)
-9 = (5*-2)+1  then:  (-9 mod 5) = +1
-9 = (5*-1)-4  then:  (-9 rem 5) = -4
----------------------------------------
example3: (-9,-5)
-9 = (-5*1)-4  then:  (-9 mod -5) = -4
-9 = (-5*1)-4  then:  (-9 rem -5) = -4
----------------------------------------
example4: (9,5)
9 = (5*1)+4  then:  (9 mod 5) = +4
9 = (5*1)+4  then:  (9 rem 5) = +4
0
mohammad saboorian