![]() |
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
![]() Wieso macht Delphi das falsch? Danke, lg, Flips |
Re: Modulo Berechnung falsch?
Weil es richtig ist. Modulo 26: 0 = 26 = 52 = ...; 25 = 51 = ...; das kannst in beide Richtung ausdehnen. Also 25 = -1 ;)
|
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
![]() |
Re: Modulo Berechnung falsch?
Hmm ne Definitionssache also. Hmm irgendwie befriedigt mich das nicht wirklich :-D
|
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:
wird von der IDIV (ASM) berechnet und da hat Delphi das Selbe ergebnis wie die CPU.
x := -1;
y := x mod 26; [edit] arg, wo kommen denn plötzlich die Antworten her? |
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