mod und div

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
HolzHarry
Beiträge: 4
Registriert: Sa 10. Okt 2009, 20:56

mod und div

Beitrag von HolzHarry »

Hallo zusammen,

ich bin seit eineigen Wochen von DELPHI nach Lazarus umgestiegen. Immer wieder stolpere ich über das eine oder andere. Aber bis jetzt konnte ich die Probleme immer lösen :P

Jetzt habe ich aber das Problem, das die Operatoren "mod" und "div" irgendwie anders als bei DELPHI funktionieren. Wenn ich das richtig verstanden habe dann erwartet FPC auf beiden Seiten des Operator ein LongInt. Bei DELPHI geht da auch mit REAL.

Warum ist das so bzw. wie kann ich einen ganzahligen Prozentwert aus zwei Double-Werten bilden?

Über eine Antwort/Unterstützung würde ich mich freuen 8)

mfg Harry

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: mod und div

Beitrag von theo »

Tja dann wirst du die Operanden wohl vorher umwandeln müssen mit trunc() oder round().
c:=trunc(a) div trunc(b);
Oder verstehe ich deine Frage falsch?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: mod und div

Beitrag von pluto »

ich nehme mal an, bei Delphi ist das genauso wie in FPC, es kommt auf den Datentyp an. Verwendest du ein Real wert kannst du auf der einen seite ein int haben und auf der anderen ein real oder andersherum. Verwendest du aber ein integer geht das natürlich nicht mehr.
Beispiel:

Code: Alles auswählen

var
  t1:Integer;
  t2:real;
begin
  // sollte nicht gehen:
  t1:=0.4 div 4 // da 0.4 ein real wert ist, aber t1 vom Typ Integer ist
  // sollte gehen:
  t2:=0.4 div 4 // t2 vom Typ Real ist sollte das gehen 
end;
habe ich dich richtig verstanden ? Das gleiche dürfte auch für MOD gelten bzw. für alle Operatoren(+,-,...).
MFG
Michael Springwald

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: mod und div

Beitrag von Socke »

theo hat geschrieben:Tja dann wirst du die Operanden wohl vorher umwandeln müssen mit trunc() oder round().
c:=trunc(a) div trunc(b);
Oder verstehe ich deine Frage falsch?
Ja, verstehst du falsch :D
Die Language Reference Guide sagt, dass mod und div nur mit Ganzzahlen arbeiten. In Delphi scheint das dann wohl anders zu sein.

Die elegantere Methode wäre meiner Meinung nach wegen weniger Rundungsfehler aber:

Code: Alles auswählen

c := trunc(a / b);
Edit: pluto: div und mod geben immer Ganzzahlen zurück; bei dir wird das Ergebnis dann hinterher nur wieder in eine Fließkommazahl konvertiert, aber auf die Rechenoperation selbst hat das keine Auswirkungen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

HolzHarry
Beiträge: 4
Registriert: Sa 10. Okt 2009, 20:56

Re: mod und div

Beitrag von HolzHarry »

Hallo zusammen,

vielen dank für die guten Rückmeldungen. Ich habe mich jetzt "trunc" eingesetzt und es funktioniert so wie ich es mir vorgestellt habe. :lol:

Also nochmal vielen Dank!

LG Harry :!:

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: mod und div

Beitrag von pluto »

Edit: pluto: div und mod geben immer Ganzzahlen zurück; bei dir wird das Ergebnis dann hinterher nur wieder in eine Fließkommazahl konvertiert
Stimmt. Das habe ich gestern übersehen.
MFG
Michael Springwald

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: mod und div

Beitrag von Hitman »

mod würde nebenbei bemerkt für gebrochene Zahlen auch wenig Sinn machen. Kann man auch ganz gut hier nachlesen: http://de.wikipedia.org/wiki/Modulo" onclick="window.open(this.href);return false;

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: mod und div

Beitrag von indianer-frank »

Hitman hat geschrieben:mod würde nebenbei bemerkt für gebrochene Zahlen auch wenig Sinn machen. Kann man auch ganz gut hier nachlesen: http://de.wikipedia.org/wiki/Modulo" onclick="window.open(this.href);return false;
Unsinn, natürlich ist mod für relle Zahlen sinnvoll! ZB ist
sin(x) = sin(x mod 2*pi)
oder auch (siehe Knuth, Fundamental algorithms, 2.Ausgabe, 1.2.4)
frac(x) = x mod 1, tan(x) = tanx(x mod pi)
Und die Wiki-Formel („Mathematische Variante“)
a mod b = a - floor(a/b)*b
ist selbstverständlich auch gültig.

Frank

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: mod und div

Beitrag von Hitman »

Gut gesprochen, stimmt. Sorry ;-)

Antworten