MOD ?

  • 1
  • 2
  • Page 1 of 2
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

MOD ?

 · 
Posted: 25.07.2015 - 15:24  ·  #1
Mal ne kleine Frage zu MOD .?

verstehen tue ich das gor nicht.
c:= a MOD 2000; und c muss ich noma div 2 nehmen ? ich habe es 20 mal getestet, lasse mir
alles auf LCD anzeigen. Oder liegt das Problem noch an meiner AVRco Version ? das da mal ein bug
drin war den ich nicht kenne ? Oder mache ich was falsch ?


a:= 145796;
b:= a div 2000;
c:= a MOD 2000;
c:= c div 2;


Gruß Frank
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: MOD ?

 · 
Posted: 25.07.2015 - 18:45  ·  #2
Hi Frank,
wo ist die Frage dazu ?
Wo liegt das Problem ?

miparo
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: MOD ?

 · 
Posted: 25.07.2015 - 19:19  ·  #3
Hallo miparo,
im Handbuch oder in der pdf Datei steht...
4.2.3 MOD
a:= a mod 5; {Modulo ganzer Zahlen}
Als Operanten sind nur die Typen Byte, Int8, Integer, Word, Longint und Longword zulässig.
Hat im obigen Beispiel die Variable 'a' den Wert $06 , so hat 'a' nach der Operation den
Wert $01. Modulo hat als Ergebnis also immer den Rest von einer Division mit den gleichen Werten.



In meinen Beispiel habe ich ein Longword genommen.
In c soll also der Rest stehen, das macht es auch, aber nur doppelter wert, den ich per Befehl
einmal teilen muss und dann stimmt auch der wert.

a:= 145796;
b:= a div 2000;
c:= a MOD 2000;

a müsste haben 72
b müsste haben 898

aber in mein b steht 1796 und das ist nicht richtig.


Gruß Frank
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1409
Registered: 03 / 2005
Subject:

Re: MOD ?

 · 
Posted: 25.07.2015 - 19:40  ·  #4
Hi Frank.

145796 mod 2000 = 1796, not 898.

2000 * 72 = 144000

145796 - 144000 = 1796.

Mod = remainder after integer division.
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: MOD ?

 · 
Posted: 25.07.2015 - 19:48  ·  #5
ja jetzt verstehe ich das erst, es ist der Rest den er nicht Teilen kann.
Ich dachte es wäre der wert nach dem komma.


Sorry.


Gruß Frank
PS. Dann muss ich doch mit Float Arbeiten.
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: MOD ?

 · 
Posted: 26.07.2015 - 13:47  ·  #6
Hallo Frank,

ganz-zahlige Operationen (byte, Word etc) haben als Ergebnis normalerweise immer eine ganze Zahl.

rolf
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: MOD ?

 · 
Posted: 01.08.2015 - 17:28  ·  #7
Moin, da ich hier schon mal was wegen Berechnung geschrieben habe
hänge ich mal meine Frage ran.
Ich möchte eine Float var a:= hoch zählen und dann mit einem festen
wert zb. 0.0025 multi.

Code

Inport float;
...
Procedure Test;
Var a,b,c : float
              i   : integer;

Begin
 a:= 0; b:= 0; c:= 0;

  for i:= 1 to 31450 do
     a:= a + 1;
  endfor; 

  b:= a * 0.0025;
  c:= 31450 * 0.025;


Write(LCDout, FloatToStr(b:7:5:'0')); LCD-> 78.6498
Write(LCDout, FloatToStr(c:7:5:'0')); LCD-> 78.625

warum ?

Mein Taschenrechner sagt das
31450 * 0,0025 = 78,625 ist.

Im LcdDisplay wird mir auch die var a = 31450.00 angezeigt.


Gruß Frank
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: MOD ?

 · 
Posted: 01.08.2015 - 20:10  ·  #8
Hallo Frank,

float ist relativ ungenau wenn grosse Zahlen (31450) mit kleinen Zahlen (0.025)
verarbeitet werden!!

Nimm doch Fix64, wenn der AVRco das schon kann.

rolf
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   139   153 · Page-Gen-Time: 0.036449s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI