Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Modulo Berechnung falsch? (https://www.delphipraxis.net/128432-modulo-berechnung-falsch.html)

Flips 29. Jan 2009 18:46


Modulo Berechnung falsch?
 
Hi,

mir ist aufgefallen, dass Delphi scheinbar die modulo-Rechnung nicht ganz beherrscht.
Delphi-Quellcode:
(-1) mod 26 = -1 //laut Evaluierung von Delphi 7
Google sagt hier aber was anderes und eine Fachliteratur von mir auch.

Wieso macht Delphi das falsch?

Danke, lg, Flips

Dax 29. Jan 2009 18:52

Re: Modulo Berechnung falsch?
 
Weil es richtig ist. Modulo 26: 0 = 26 = 52 = ...; 25 = 51 = ...; das kannst in beide Richtung ausdehnen. Also 25 = -1 ;)

Apollonius 29. Jan 2009 18:54

Re: Modulo Berechnung falsch?
 
Meine Delphi-Hilfe definiert Modulo so, dass -1 mod 26 tatsächlich -1 sein sollte. Grundsätzlich gibt es mehrere Möglichkeiten für die Modulo-Operation, wenn der Dividend negativ ist. Das Ergebnis kann entweder das selbe Vorzeichen wie der Dividend erhalten oder eben immer positiv sein. Insofern gibt es da kein richtig oder falsch - es ist einfach eine Definitionssache. Siehe hierzu auch den Eintrag in der Wikipedia.

Flips 29. Jan 2009 18:56

Re: Modulo Berechnung falsch?
 
Hmm ne Definitionssache also. Hmm irgendwie befriedigt mich das nicht wirklich :-D

himitsu 29. Jan 2009 18:58

Re: Modulo Berechnung falsch?
 
OK, diese (-1) mod 26 rechnet der Compiler aus und speichert das Ergebnis als Konstante ... da könnte man eventuell denken es wäre ein Fehler in Delphi, aber
Delphi-Quellcode:
x := -1;
y := x mod 26;
wird von der IDIV (ASM) berechnet und da hat Delphi das Selbe ergebnis wie die CPU.

[edit]
arg, wo kommen denn plötzlich die Antworten her?

stoxx 29. Jan 2009 20:25

Re: Modulo Berechnung falsch?
 
Mathematisch ist wohl 25 korrekt.
In Mathematik Büchern steht das zumindest, und auch in der Kryptographie wird damit wohl gerechnet.
man muss also auf die -1 solange die 26 addieren, bis es eine positive Zahl ergibt.
(Laut Mathebücher der Informatik :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz